C++BuilderにてEFCreateErrorが回避できません

このQ&Aのポイント
  • C++Builderにてファイルの保存時にEFCreateErrorが発生してしまいます
  • OpenDialogを使用してファイルパスを選択した場合にのみエラーが発生します
  • 手入力での保存は正常に行えるため、原因はOpenDialogの使用にある可能性があります
回答を見る
  • ベストアンサー

C++BuilderにてEFCreateErrorが回避できません

こんにちは。プログラミング初心者でくだらない質問だったら申し訳ないのですが、調べてもどうしても解決できなかったので質問させて下さい。お手数をおかけしますが宜しくお願い致します。 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にてファイルパスを選択した場合のみ発生してしまいます。 これはどのような原因が考えられますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • KoHal
  • ベストアンサー率60% (110/181)
回答No.1

SaveToFileで指定したファイルパスに問題がありそうですね。 1.指定したファイルがすでに存在し、それを別のプロセスが開いていて書き込みが出来ない状態である。 2.指定したディレクトリが存在しない。 3.指定したディレクトリに書き込みが許されていない。 OpenDialogを使用したときのみ例外が発生するということは、ひょっとして保存ファイルを相対パスで指定してませんか? OpenDialogはカレントディレクトリを変更するので2.3.がおきる可能性があります。

chanter
質問者

お礼

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

関連するQ&A

  • AVIファイルをロードする方法

    こんにちわ。 C++でファイルをロードするとき、LoadFromFileメソッドを使用しますよね? BitmapやTextならロードできるのですが、AVIファイルはどうやってロードすればよいのでしょうか? * 一般的なファイルをロードする例   if(OpenDialog1->Execute()){   Memo1->Lines->LoadFromFile(OpenDialog1->FileName); } これではAVIファイルをロードしてPanelなどのコンポーネントに表示させることができないのです。  どうか、ヒントでもアドバイスでもください!!!!  よろしくお願いします。

  • WEB上でテキストデータを読み書きしたい

    WEB上で複数のテキストボックスに値を入力させてそれをテキストでカンマ区切りで保存、ボタンクリックでそのテキストの内容を表形式で表示みたいなことはできるのでしょうか?。

  • VB6 重複チェックについて

    お世話になります。 次の処理をVisual Basic6.0で教えてください。 1.Text1にキー入力した値をコマンドボタンクリックすると、Text1の値を保存します。 2.次にText1に新たに入力してコマンドボタンクリックで前項で保存した値と重複して   いないかチェックして重複無しならText1の値を保存します。 3.Text1に新たに入力して・・・・重複チェックして・・・・ といった具合に保存する値と重複チェックする対象の値がどんどん増えていきます。 さすがに10,000件はいかないですが。 保存先は読み書き込みの時間も考慮してVB内のTextBOXが第1希望、外部のtxtファイルやcsvファイルは第2希望としたいです。 If Text1=保存値 Then  処理 else  処理 End If 保存値をText2として行いましたが、完全一致でないとダメでした。 入力値:保存値=1:n(入力値が複数の保存値と重複したかどうか)が知りたいです! お手数おかけしますが、何卒よろしくお願いします。

  • テキストボックスを空白にする方法

    テキストボックスに数字が入力されている場合はいいんですが、何も入力されていないときに、其のテキストボックスの値をゼロとすると、どうしてもテキストボックスに0と入力しなければ其のテキストを計算式に使えないので困っています。テキストボックスに何も表示されていないままにしたいのですが。(値はセロということのまま)   例えばテキストボックス1には10、テクストボックス2には何も入力しないでそのままにする。ボタンをクリックすると、二つの値が足されて合計10とでるようにしたいのです。その際テキストボックス2には何も入力されないままでお願いします。 わかりにくい説明ですみませんがよろしくお願いします。

  • C#でバブルソート

    テキストボックスに任意の整数を複数個入力し、ボタンを押すことで入力した数字を別のテキストボックスに昇順・降順表示するプログラムを作りたいと思っています。 例えば 入力用テキストボックスに1、10、5をキーボードで入力 ↓ 作っておいた「昇順に並び替え」のボタンをクリック ↓ 出力用テキストボックスに1、5、10と表示される (「降順に並び替え」のボタンをクリックした場合は、10、5、1と表示) といった感じです。 バブルソートを使って作りたいのですが、超初心者のため、数字同士の比較?や、テキストボックスへの出力の仕方が全く分かりません。 分かりにくい文章のみの状況説明になってしまいましたが、ご指導よろしくお願いします。 マイクロソフトのビジュアルのC#プロジェクトです。

  • コンボボックス ▼ボタンをクリックしたらイベント

    コンボボックスのクリックイベントについて。 コンボボックスの▼ボタンをクリックしたらイベントを発生させたいのですが Private Sub コンボ0_Click() MsgBox "" End Sub として、▼ボタンを押しても無反応です。 どうやらClickイベントは値が入力されたら発生するようですが 値を入力する前に、▼ボタンでプルダウンで値を入力しようとしたとき位 発生させるにはどうすればいいでしょう? GotFocusイベントだと、▼ボタン以外の部分に触れてもイベントが発生してしまいます。

  • CGI,Perlで下記のようなことを、行いたいと考えています。

    CGI,Perlで下記のようなことを、行いたいと考えています。  a.html  b.html  c.html があり、 __________________________________ 1:それぞれ、フォームに、テキストボックスが一つあります。 2:他のフォームに遷移できます。(例:a.htmlからc.hmtlのように) 3:各フォームに「A、B、Cの値を確認」ボタンがあります。 4:3のボタンをクリックすると、各テキストボックスで入力した 値が表示される。 【イメージ】 a.htmlのテキストボックスに、100を入力 b.htmlのテキストボックスに、200を入力 c.htmlのテキストボックスに、300を入力 した場合。 Aで入力された値は100です。 Bで入力された値は200です。 Cで入力された値は300です。 ______________________________________ と表示させる、cgiを作成したいです。 又、その際、hiddenを使用して行う方法(手順)を教えて頂けないでしょうか。 ファイルに書き込むことで、値を保持しておくのではと 考えましたが、a.htmlの値100を書き込み、再度、a.htmlの 値を書き込むと、a.htmlのフォームから送られた値が2つ(1回目、2回目)書き込まれた 状態になるように思います。 今回のように、例えば、ファームの入力値を保持して他の(b.thmlなど)に 遷移し、ボタンをクリックすると、全フォームの値を表示するような場合、 どのような方法が考えられるのでしょうか? どうぞ、宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • perl/cgiについて、教えて下さい。

    perl/cgiについて、教えて下さい。 下記のようなことを、行いたいと考えています。 とりあえず、  a.html  b.html  c.html があり、 __________________________________ 1:それぞれ、フォームに、テキストボックスが一つあります。 2:他のフォームに遷移できます。(例:a.htmlからc.hmtlのように) 3:各フォームに「A、B、Cの値を確認」ボタンがあります。 4:3のボタンをクリックすると、各テキストボックスで入力した 値が表示される。 【イメージ】 a.htmlのテキストボックスに、100を入力 b.htmlのテキストボックスに、200を入力 c.htmlのテキストボックスに、300を入力 した場合。 Aで入力された値は100です。 Bで入力された値は200です。 Cで入力された値は300です。 ______________________________________ と表示させる、cgiを作成したいです。 又、その際、hiddenを使用して行う方法(手順)を教えて頂けないでしょうか。 ファイルに書き込むことで、値を保持しておくのではと 考えましたが、a.htmlの値100を書き込み、再度、a.htmlの 値を書き込むと、a.htmlのフォームから送られた値が2つ(1回目、2回目)書き込まれた 状態になるように思います。 今回のように、例えば、ファームの入力値を保持して他の(b.thmlなど)に 遷移し、ボタンをクリックすると、全フォームの値を表示するような場合、 どのような方法が考えられるのでしょうか? どうぞ、宜しくお願いいたします。

    • ベストアンサー
    • Perl
  • JavaScriptについて教えてください。

    JavaScriptについて教えてください。 ringo.html、orange.htmlがあります。 それぞれに、テキストボックスと、submitボタンが一つずつあります。 行いたいことですが、 どちらかの、submitボタンをクリックすると、 それぞれの、テキストボックスの値を表示したいです。 ※hiddenを使用して実現したいです。 【イメージ】 ringo.htmlのテキストボックスに「100」を入力 orange.htmlのテキストボックスに「200」を入力 いずれかの、submitボタンをクリックすると _______________ ringoの入力値は、100です。 orangeの入力値は、200です。 ________________ といったイメージです。 よろしくお願いします。

  • [C#]テキストボックスに入力した値を、ツリービューに反映させたい

    [C#]テキストボックスに入力した値を、ツリービューに反映させたい C#初心者です。 あるアプリを作っていて、テキストボックスにユーザーが任意の数字を入力し、 ボタンをクリックすると、Treeviewのある位置に反映されるというものです。 説明が抽象的で申し訳ありませんが、ご教授願います。 宜しくお願いいたします。

専門家に質問してみよう