- ベストアンサー
ファイルを開く画面で選択したファイルへのパス
ファイルを開く画面で選択したファイルへのパスのようなものはどこに記憶されているのでしょうか? その選択したファイルを用いて処理を行いたいと思っているのですが。 サンプルのプログラムでは『const char *s;』として書かれています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★普通にファイルのオープン、クローズ処理は理解していますか? ・ここから、説明した方が良いでしょうか? ・また、サンプル・プログラムの『const char *s;』とは何のことですか? ・とりあえず下にサンプルを載せます。 サンプル: /* 構造体の設定は前回のサンプルを参考にして下さい */ if ( GetOpenFileName(&ofn) ){ ifstream fin( ofn.lpstrFile ); ←読み込みオープン ofstream fout( "output.txt" ); ←書き込みオープン char buff[ 512 ]; while ( fin.getline(buff,sizeof(buff)) ){ ←行単位で読み込む fout << buff << endl; ←行単位で書き込む } } 最後に: ・上記のサンプルは『開くダイアログ』で選択したファイルを1行単位でカレント・フォルダの 『output.txt』に出力します。→ファイルのコピー処理みたいな感じですね。 ・『ifstream fin()』の部分で選択されたファイルパス『ofn.lpstrFile』を参照して使っています。 これでファイルをオープンして、その後ファイル処理を行います。→今回のサンプルでは『output.txt』に 行単位で出力しています。よって、選択ファイルのコピーを『output.txt』ファイル名で作成する ことになります。 ・以上。おわり。
その他の回答 (2)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★『ファイルパス』を取得して何を行いたいのですか? ・例えとして、メモ帳ソフトがファイルを開きたいときに『コモンコントロール』の 『ファイルを開く』ダイアログを使ってファイルのパス名を取得します。その後は、 このパス名のファイルを fopen 関数のようなファイルをオープンする処理で使います。 ・構造体メンバの『lpstrFile』の文字列は普通に参照すれば良いと思います。 サンプル: OPENFILENAME ofn = { 0 }; ←構造体の初期化 TCHAR szPath[ 512 ]; ←ここに選択したファイルパスが格納される(フルパス名) TCHAR szFile[ 512 ]; ←ここに選択したファイル名が格納される(パス以外の名前) ofn.lStructSize = sizeof( OPENFILENAME ); ofn.hwndOwner = hWnd; ←ウインドウ・ハンドル ofn.lpstrFilter = TEXT("テキスト文書(*.txt)\0*.txt\0")TEXT("すべてのファイル(*.*)\0*.*\0"); ofn.nFilterIndex = 0; ofn.lpstrFile = szPath; ofn.nMaxFile = sizeof( szPath ); ofn.lpstrFileTitle = szFile; ofn.nMaxFileTitle = sizeof( szFile ); ofn.lpstrInitialDir = TEXT("C:\\"); ←初期フォルダ位置 ofn.lpstrTitle = TEXT("開くよ!"); ←ダイアログのタイトル ofn.Flags = OFN_FILEMUSTEXIST; if ( GetOpenFileName(&ofn) ){ ←ここで『ファイルを開く』ダイアログが出る FILE *fp; if ( (fp = fopen(szPath,"r")) != NULL ){ ←ここで『ofn.lpstrFile』の選択されたファイルパスを参照して使う /* ここでファイル処理など */ fclose( fp ); } } 最後に: ・『コモンコントロール』の『ファイルを開く』ダイアログでファイルパスを取得して sk23 さんは どんな処理を行おうとしているのですか? ここがよく分かりません。 ・上記のサンプルは、GetOpenFileName 関数で『ファイルを開く』ダイアログを出して、ファイルパス を取得した後、fopen 関数でファイルをオープンしています。その後、コメントの部分でファイルの 操作などを行ってクローズ処理をする事になります。 ・また、ファイルパスだけを MessageBox 関数などで表示させてファイル操作を行わない場合もありますね。 ・とにかく『ファイルパス』を取得して『何』を行いたいのですか? ・以上。また、補足要求になってしまいました。
補足
ファイルパスを用いてなにがしたいかというのは、Oh-Orangeさんの予想通り、ファイルをオープンして処理を行いたいからです。 >>構造体メンバの『lpstrFile』の文字列は普通に参照すれば良いと思います。 とはどのようにしたらよいのでしょうか。 開くのには『ifstream fin();』という形をとろうと思っているのですが。 初歩的な質問で申し訳ありません。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★コモンコントロールの『ファイルを開く』ですか? ・それは『GetOpenFileName』関数に渡す OPENFILENAME 構造体の『lpstrFile』にパスが 選択されると格納されるので自分で管理・処理して下さい。分かりますか? ・それから、『const char *s;』と言われてもサンプルソースを見ないと分かりません。 ・以上。補足要求します。
補足
回答ありがとうございます。 アプリケーションソフトでのファイルを開くなので、コモンコントロールのものだと思います。 ファイルを選択して格納された『lpstrFile』の値を用いたい場合はどうしたらよいのでしょうか? プログラム作成経験や知識が乏しく、申し訳ありません。
お礼
返答が遅れてしまい、申し訳ありません。 現在、大学4年でプログラムより先に論文を提出しなければならなくなりました。それが終わりましたら、Oh-Orangeさんのご指導を参考にプログラムを作成できればと思っております。 暖かい助言の言葉に大変、感謝しております。