- ベストアンサー
ファイルの開き方がうまくいかない問題
- ファイルを開く際にエラーが発生しています。
- ファイルの参照後、実行ボタンを押すとエラーが発生します。
- "data/test.txt"ファイルは存在しており、正しく開けるはずです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
fpBase = fopen("data/test.txt", "r"); この指定だと、「カレント・ディレクトリ」からの相対パス指定になります。 普通に実行ファイルを叩いて実行した場合、最初は「カレント・ディレクトリ」は実行ファイルのパスになります。 例えば、この実行ファイルが C:\Test\Test.exe であった場合、最初は「カレント・ディレクトリ」は C:\Test になっているので、 C:\Test\data\test.txt を探しに行きます。 ところが、この「カレント・ディレクトリ」はすぐ変わってしまいます。 例えばあなたがお使いのCFileDialogなどでファイルを選択すると、選択したファイルがあった場所が新しい「カレント・ディレクトリ」になります。 ファイルダイアログで D:\File\File.txt を選択した場合、「カレント・ディレクトリ」は D:\File\ になっているため、 D:\File\data\test.txt を探しに行ってしまう訳です。 というわけで相対パス指定はやめましょう。 いま自分が実行している実行ファイルのパスは、GetModuleFileName関数で取得できます。 http://msdn.microsoft.com/ja-jp/library/cc429127.aspx これ。 これを使うと、上記の例なら C:\Test\Test.exe というパスが取れるので、「Test.exe」の部分を取っ払って「data\test.txt」をつければOKです。
その他の回答 (1)
- machongola
- ベストアンサー率60% (434/720)
こんばんは。 ファイル選択ダイアログで[開く]を押すと、カレントディレクトリのパスが変更される為、"data/test.txt"(相対パス)だけでは、ファイルを探す為のパスが的ハズレになる、と言う事ではないでしょうか。 試しに「Cドライブにdataディレクトリを移動」して、"C:/data/test.txt"(絶対パス)とすれば、常に成功する筈です。 アプリケーションと同じディレクトリにdataディレクトリを置く場合、ファイル選択ダイアログでカレントディレクトリのパスが変更される前に、アプリケーションの存在するディレクトリのパスを確保して置き、文字列を組み立てて、test.txtを絶対パスで指定する必要があります。
お礼
回答ありがとうございます。 >ところが、この「カレント・ディレクトリ」はすぐ変わってしまいます。 >例えばあなたがお使いのCFileDialogなどでファイルを選択すると、 >選択したファイルがあった場所が新しい「カレント・ディレクトリ」になります。 カレントディレクトリが変わる…納得です。 考え付きそうなのに思いつかないものですね…。 >というわけで相対パス指定はやめましょう。 アドバイスもありがとうございます。 今後は教えてくださった方法でパス指定しようと思います。 助かりました。ありがとうございました。