電子書籍の厳選無料作品が豊富!

こんにちは。プログラミング初心者でくだらない質問だったら申し訳ないのですが、調べてもどうしても解決できなかったので質問させて下さい。お手数をおかけしますが宜しくお願い致します。

C++Builderにて単純なプログラムを作成しています。
内容はTEditコンポーネント,TButtonコンポーネント,TOpenDialogコンポーネントを設置し、TButtonのクリックイベントでOpenDialogのExcecuteメソッドを呼びます。
ExcecuteメソッドがtrueだったらOpenDialogのFileNameプロパティの値をTEditのTextにコピーし、そのText、つまりファイルのフルパスをExtractFileName関数でファイル名のみにした値をTStringList型にAddします。
そして最後に保存ボタンクリックでTStringListオブジェクトのSaveToFileメソッドで保存する、という内容なのですが、保存ボタンクリック時にEFCreateErrorが発生してしまいます。
常に発生するのであれば原因も絞れるのですが、「OpenDialogのExcecuteメソッドを呼び出した場合のみ」という条件で例外が発生してしまい、原因が分からず困っております。
つまり、手入力でTEditに入力した場合などは正しく保存できるのですが、OpenDialogにてファイルパスを選択した場合のみ発生してしまいます。
これはどのような原因が考えられますでしょうか?

A 回答 (1件)

SaveToFileで指定したファイルパスに問題がありそうですね。



1.指定したファイルがすでに存在し、それを別のプロセスが開いていて書き込みが出来ない状態である。
2.指定したディレクトリが存在しない。
3.指定したディレクトリに書き込みが許されていない。

OpenDialogを使用したときのみ例外が発生するということは、ひょっとして保存ファイルを相対パスで指定してませんか?
OpenDialogはカレントディレクトリを変更するので2.3.がおきる可能性があります。
    • good
    • 0
この回答へのお礼

大変的確なご回答ありがとうございます。
なるほど~OpenDialogはカレントディレクトリを変更するのですか・・・。
デスクトップにテスト用のjpegを置いてそれを読み、アプリの格納されているディレクトリ内のDataディレクトリ内にそのテキストファイルを保存しようと相対パスで指定しておりました。
OpenDialogを開いた際にカレントディレクトリがアプリ格納ディレクトリからデスクトップディレクトリに変わってしまっていたのですね。。。
大変的確にご回答頂きまして、とても助かりました。ありがとうございました。また宜しくお願いいたします。

お礼日時:2004/10/08 15:03

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