今だけ人気マンガ100円レンタル特集♪

OSはWindows7を使用しています。

C言語を使って、フォルダを開きたいです(エクスプローラを起動させたいです)

一応、下のプログラムで、思った動作にたどり着きました(ですが、不満があります)。

「main.c」
#include <stdlib.h>

int main(void)
{
system("C:\\Users\\UserName\\Desktop\\openDir.bat");
return 0;
}


「openDir.bat」(デスクトップに保存されています)
----
explorer "C:\Users\UserName\Google ドライブ"
explorer "X:\"



流れは、
 1.main.cを実行することで、openDirが開かれます。
 2.openDirがGoogle ドライブフォルダとKDrive(Xドライブにあります)が開かれます。

ですが、最終的には、C言語のみを使って実装したいです。
自分だけが使うプログラムなので、私のパソコンで動作すれば満足です。

お願いします

このQ&Aに関連する最新のQ&A

A 回答 (1件)

>ですが、最終的には、C言語のみを使って実装したいです。



単純に
#include <stdlib.h>

int main(void)
{
 system("explorer \"C:\\Users\\UserName\\Google ドライブ\"");
 system("explorer \"X:\\\"");
 return 0;
}
じゃダメなんですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

> じゃダメなんですか?
全然問題ないです!

system()がどういうものなのか、調べてみることが必要だったようですね。
思ったとおりに動作してくれました。
ありがとうございました。

お礼日時:2013/04/28 17:01

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。

Qファイル出力の場所を指定

現在C++にてhtmlファイルを出力するプログラムを作っているのですが、出力場所を指定することはできるのでしょうか?(現在はそのプログラムソースが保存されている場所と同じファイル内に出力されますが、それをデスクトップに出力するなど。)
もし、方法がありましたら、教えてください。
ソースや参考HPのURLなどのせていただけたらありがたいです。
環境はVisualStudio.NET2003です。
よろしくお願いします。

Aベストアンサー

単にファイル名の前にパスを指定する。

絶対パス指定
fp=fopen("c:/temp/test.txt","w");

相対パス指定
fp=fopen("./hoge/test.txt","w");


デスクトップはOSやユーザによって場所が異なるので、少し面倒です。
XPの場合環境変数を利用してこんな感じで出来ると思います。

例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main(void)
{
FILE *fp;
char fname[1024];
strcpy(fname,getenv("USERPROFILE"));
strcat(fname,"/デスクトップ/test.txt");
fp=fopen(fname,"w");
//処理
fclose(fp);
}

Qfopenでディレクトリ内の全ファイルを順次開く方法

 UNIX上の/home/info/user/log内にある*.logファイルを一つずつfopenで開いて一行ずつ読み込み、用が済んだらfcloseで閉じていくようなプログラムを作りたいのですが、どうすれば良いのでしょうか?
 最初はls -l /home/info/user/log/*.logをリダイレクトしたファイルリストを作り、それを読み込ませてfopen……という流れを考えていたのですが、対象となるファイルが万単位に登る為実現不可でした。
 一行ずつ読み込ませる部分は既に出来ているので、fopen/fcloseに絞ってお教え下さい。

Aベストアンサー

お書きの方法でも別に万のファイルがあっても実現可能だと思いますが、リダイレクト先の一時ファイルを置く場所が足りないのでしょうか?

普通は、opendirして、
(readdirでディレクトリの内容を読み出してファイル名を調べfopen→処理→fclose) を繰り返します。

Qリストビューの選択状態を取得するメッセージはありますか?

リストビューが選択状態(1行が青色や灰色の背景になる状態)にあって、エディットボックスが空欄では無いときに、
あるボタンを有効にするという処理をしたいと思っています。

リストビューが選択されていることを教えてくれるメッセージがあれば、教えてください。よろしくお願いします。

環境:Win32 API, VC++6.0

Aベストアンサー

★アドバイス
>また話は少し変わってしまうのですが、リストビューに項目を追加したときに、
>その追加した行にフォーカスが合って、スクロールバーが自動的に下がってくるように
>することは可能でしょうか。
 ↑
 可能です。
 ListView_EnsureVisible( hList, 追加した行, TRUE );
 とします。これで自動的に最後に追加した行にスクロールします。
・あとちょっと不明な点がありますが、
 (1)追加した行にフォーカスを合わせるのか?
 (2)追加した行に範囲選択を設定するのか?
 どっちでしょうか。
 どちらにしても ListView_SetItemState() マクロで設定できますけど。
・(1)フォーカスを合わせる
 ListView_SetItemState( hList, 追加した行, LVIS_FOCUSED, LVIS_FOCUSED );
・(2)追加した行に範囲選択を設定する
 ListView_SetItemState( hList, 追加した行, LVIS_SELECTED, LVIS_SELECTED );
 とします。
※フォーカスと範囲選択は違います。注意。

>今回はある特定の行ではなく、リストビューのどこかの行が選択されているという
>イベントハンドラがあればと思っているのですが、そのようなものはあるのでしょうか。
 ↑
 イベントハンドラはないと思いますけど。
 その代わりに ListView_GetItemState()、ListView_GetNextItem() マクロのチェックで
 分かると思います。ListView_GetNextItem() で LVIS_SELECTED フラグを見つければ
 その行とかが分かると思います。
・あるいは先頭行から順番に ListView_GetItemState() マクロで LVIS_SELECTED フラグが
 立っている行を自分で検索するとかすれば良い。
 詳しくは下の『参考URL』をどうぞ。
・以上。

参考URL:http://www.geocities.jp/ekakibuta/Programing/ListView_GetNextItem.htm

★アドバイス
>また話は少し変わってしまうのですが、リストビューに項目を追加したときに、
>その追加した行にフォーカスが合って、スクロールバーが自動的に下がってくるように
>することは可能でしょうか。
 ↑
 可能です。
 ListView_EnsureVisible( hList, 追加した行, TRUE );
 とします。これで自動的に最後に追加した行にスクロールします。
・あとちょっと不明な点がありますが、
 (1)追加した行にフォーカスを合わせるのか?
 (2)追加した行に範囲選択を設定するのか?
 どっちでし...続きを読む

QC ファイル出力で、フォルダがない場合でも作成する方法

先日、皆さんに教えていただき

Cで出力ファイルを指定のフォルダに出す方法が上手く出来ました。
具体的には、↓こうやって指定しました。
sprintf( buff, "%s\\%s", path, filename );

やっていて思ったのですが、
この方法だと、指定フォルダが最初から無いとエラーが出てしまいます。
フォルダが無かったら、作成し、その中にファイルを出力していってくれる。という方法はできるものなのでしょうか?

もしできるようなら教えて下さい!!
よろしくお願いします!

Aベストアンサー

★回答ではないが余談。
・koko_u_ さんありがとう。
 気づくとアンダーバーの関数名で置き換わっているみたいですね。
 他にも気づくといろいろ置き換わっていますね。
 C 関数、最近使っていないのでアンダーバーの関数名で調べてみます。
・ありがとうございました。

●質問者さんへ。
・_mkdir() 関数が使える場合はその関数でもフォルダ(ディレクトリ)が作成できます。
 それでは。

参考URL:http://www5c.biglobe.ne.jp/~ecb/c/12_14.html

QGetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・

お世話になっています。

iniファイルを読込み、各変数に代入するC言語のDLLを作成したいのです。
このサイトの投稿や、MSDNなどにも載っていたのですが、
少し理解に苦しみます。

現在まで、理解した点がwindows.hのインクルードを
記述するところ辺りです。
iniファイルは下記のようなレイアウトです。

---<mst.ini>----------------------------
[user]
name=username
ID=userid
[pc]
pcname=FMV
----------------------------------------

#include<windows.h>は記述することまでは
分かりましたが、以下から進みません。。。

GetPrivateProfileString("")

初心者で申し訳ありませんが、お助け願います。

Aベストアンサー

こんにちは。itohhといいます。

サンプルを載せておきます。

mst.iniファイル内の[user]セクションのnameキーの値を取得する。
DWORD dwLen=0;
char strBuf[100];
dwLen = GetPrivateProfileString("user",       // セクション名
                "name",       // キー名
                "soushi_ni",     // デフォルト値
                strBuf,       // 読み込んだ値を格納するエリア
                sizeof(strBuf),   // 上記のエリアのサイズ
                "mst.ini" );     // iniファイル名

解説:
iniファイル名をフルパスで指定しないとWindowsのディレクトリにあるものと判断されます。
Win9xなら「c:\windows」、WinNT系なら「c:\WinNT」。

[user]セクションのnameキーがないときは、デフォルト値で指定した値が設定させます。

復帰値「dwLen」は実際に設定した値(文字列)の長さが返されます。

こんにちは。itohhといいます。

サンプルを載せておきます。

mst.iniファイル内の[user]セクションのnameキーの値を取得する。
DWORD dwLen=0;
char strBuf[100];
dwLen = GetPrivateProfileString("user",       // セクション名
                "name",       // キー名
                "soushi_ni",     // デフォルト値
                strBuf,       // 読み込んだ値を格納するエリア
             ...続きを読む

QCString から LPCTSTRの型に変換

visual studio 2013 VC++を使用していますが、WINDOWSの関数に渡すためにCString からLPCTSTRに変換する必要があります。実際にどのようにするのかわかりません。
例えば、以下のサンプルは他の質問コーナーの回答をアレンジしたものです

CString str = _T("ABC");
int siz = str.GetLength()+1;
LPCTSTR pszFName = new TCHAR[siz];
_tcscpy_s( pszFName, siz, str );

で変換するのですが
LPCTSTRからwchar_t*へ変換できませんとエラーがでます
_tcscpy_s()は使用できないのでしょうか

Aベストアンサー

>APIはCStdioFile の Open()でファイル名を与えるところ

APIではないようですが……。

http://msdn.microsoft.com/ja-jp/library/ee247566.aspx
ならば、そのままCStringの変数渡せば、よろしく処理してくれると思いますけど。

Qsystem関数がうまくいかない

windows c++ でsystem関数を使い任意の実行ファイルを動かそうとしてもうまくいきません。
エラーはcharからintにイニシャライズできません
となります。また実行ファイルにスペースがあったら不味いのでしょうか。

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
int=system("C:/Documents and Settings/shun/My Documents/aaa/project abc1/Debug/project abc1.exe");

return 0;
}

Aベストアンサー

int の扱いは、既に回答があるとおりです。
また、system() 関数は、引数を単純に cmd.exe に渡すだけでして、スペースはまずいです。このばあい、" でくくる必要があります。また、Windows だと、ディレクトリの区切りが / であるのもまずいでしょう。
(純粋にファイルを扱う場合は、/ も使えます)

system("\"C:\\Documents and Settings\\shun\\My Documents\\aaa\\project abc1\\Debug\\project abc1.exe\"");

です。

QDWORDの実際の型は何でしょうか

VC++.NETの環境です。
DOWRD dw1 = 1;
int i = 2; と定義し
ここで
if ( i > dw1 ){
何かの処理;
}
とコーディングすると
warning C4018: '>' : signed と unsigned の数値を比較しようとしました。
のワーニングがでます。
これは、DWORDがint型でなくunsigned int型のようにも見えます。
ある本によれば(VC++.V.NET逆引き大全500の極意)
DWORD はint型であると記述されています。
もし、int型ならこのワーニングはでないはずなのですが、
なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

Aベストアンサー

型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。
DWORD型はwindef.hで
"typedef unsigned long DWORD;"
と宣言されています。

Visual Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。

QCStringのFindで文字列検索を行いたいのですが

こんにちは。
いつもお世話になっております。

CStringのFindメソッドで文字列検索を行っているのですが、文字列ではなくコードで検索が行われてしまい困っています。
-------------------------------------------------------

CString TargetStr;

TargetStr = "ハヒフヘホ";
if(TargetStr.Find("z", 1) != -1){
return FALSE;
}

-------------------------------------------------------

上記で文字"ホ"のコードが「837A」で"z"が「7A」のため、
文字列が存在するという結果が帰ってきます。
コードではなく文字そのものの検索をするにはどうしたらよいでしょうか?
基本的なことで申し訳ありませんが、ご教示下さい。

<環境>
Windows 2000, VC6.0

Aベストアンサー

CString::Findメソッドは、1バイトごとの検索を行うので、そのような結果になってしまいます。

このような処理を避けるには、CString::Findではなく、_mbsstrを利用します。
詳しくは、MSDNを参照のこと。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclib/html/_crt_strstr.2c_.wcsstr.2c_._mbsstr.asp

どちらかといえば、_tcsstrを利用してUnicodeとMBCSの両方に対応できるようにしておいたほうがいいです。
#この場合、_UNICODEもしくは_MBCSのどちらかが設定されていないと正しく動きません。

*注意*
この関数はANSIに互換性がないようですので、Windows以外では利用できない可能性があります。


また、上記のような関数を使わず、自分で実装するなら、以下の参考URLを参考にしてください。

参考URL:シフトJIS文字列の文字検索

参考URL:http://katsura-kotonoha.sakura.ne.jp/prog/c/tip0002d.shtml

CString::Findメソッドは、1バイトごとの検索を行うので、そのような結果になってしまいます。

このような処理を避けるには、CString::Findではなく、_mbsstrを利用します。
詳しくは、MSDNを参照のこと。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclib/html/_crt_strstr.2c_.wcsstr.2c_._mbsstr.asp

どちらかといえば、_tcsstrを利用してUnicodeとMBCSの両方に対応できるようにしておいたほうがいいです。
#この場合、_UNICODEもしくは_MBCSのどちらかが設定されていないと...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング