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;
あわてていじりまわしているテスト途中のコードを書いてしまいましたがTryやReadLn(f,s);などスタンダードな書き方をしています。失礼しました。
エラーコードが出たらまず何のエラーか調べるのが鉄則。
この場合、まず調べるのはヘルプの「入出力(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あたりに変わってしまっているのではないでしょうか。
ツイート | ![]() |