ファイルを開くときのI/Oエラー183


みずき  2010-04-15 23:16:19  No: 38292

D6パーソナルにCommXを入れて作ろうとしています。
ポート番号やビットレートなどを毎回入れなくても前回の設定がComboBoxなどに入るようにしようとFormCreateの段階でテキストファイルに入れてあるデータを読むようにしました。読み出しのコードは今まで何度も使っているものですがなぜかreset(f)のところでI/Oエラー(183)と出てしまい頭をかかえています。FileModeなど色々といじってみましたが解決せずに開発もここから進まずにいます。またportをOPENする段階でもOPENしたときの設定を保存するようにしていますがこの書き込み時にもRewite(f)でI/Oエラー(183)が出てしまいます。  こんな簡単なことと思われるところですが何か致命的な間違いがあるのか、改善策があるのかご指導ください。

var 
f:textfile;
s:string;

begin
portpath:=myfolder + '\port.txt';    //宣言すみ
if fileexists(portpath)=true then begin

                assignfile(f1,portpath);
               // FileMode := 0; //fmOpenRead;
                        reset(f);
                        read(f,s);
                        if s<>'' then combobox1.text:=s;
                finally
                   closefile(f);
                end;

end else begin
    combobox1.text:='1';
end;


みずき  2010-04-15 23:24:28  No: 38293

あわてていじりまわしているテスト途中のコードを書いてしまいましたがTryやReadLn(f,s);などスタンダードな書き方をしています。失礼しました。


tor  2010-04-15 23:50:03  No: 38294

エラーコードが出たらまず何のエラーか調べるのが鉄則。
この場合、まず調べるのはヘルプの「入出力(I/O)エラー」ですが、
ここには(少なくともD7では)183は載っていませんね…

こうなるとソースファイルを検索するとか、FormatMessageを使って
エラーメッセージを取り出すとかして調べることになります。
が、強力なエラーコード検索ツールが提供されているので、せっかくだからこれを使ってみましょう。
・Microsoft Exchange Server Error Code Look-up 
http://www.microsoft.com/downloads/details.aspx?familyid=be596899-7bb8-4208-b7fc-09e02a13696c&displaylang=en

これで Err 183 として調べると、ERROR_ALREADY_EXISTSがひっかかり
作成しようとしたファイルがすでに存在するというエラーであることがわかります。
つまりResetでファイルを新規作成しようとしていることが推測できます。
おそらく、FileModeがfmCreaetあたりに変わってしまっているのではないでしょうか。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加