発信ミスで上の質問文が途中できれてしまいました。すみません。
ファイルの作成でお伺いします。
下記のような記述でファイルが存在しない時に'A'で作成したとき
'B'でエラーが発生してとまります。
かなり初歩的なことだと思うのですが、、、
どこが悪いのでしょうか?
if FileExists('***.TXT')=False then begin
FileCreate('***.TXT'); //-------'A'
end;
Assign(F,'***.TXT');
ReWrite(F); //------'B'ここでエラーがでてとまる
エラーの原因は、ファイル管理ルーチンの混同。
FileCreate関数の戻り値(OSファイルハンドル)と Pascalファイル変数(F)は まったく別物なので、ヘルプで再確認を。
関数を混同しているようですね。
昔から2種類ありますので、間違いやすい所です。
通常の行単位の処理なら①を使うか、③TStringlistを使います
// ①
procedure TForm1.Button1Click(Sender: TObject);
var
F: TextFile;
s , FileName : string;
begin
FileName := '***.TXT';
AssignFile(F, FileName); // 変数に代入
FileMode := fmOpenReadWrite; {ファイルモードの設定 }
if FileExists(FileName) then
Reset(F) // 開く
else
Rewrite(F); // 新規作成
//
// ここに処理を書く
Writeln(F, S);
//
CloseFile(F); // 閉じる
end;
// ②
procedure TForm1.Button2Click(Sender: TObject);
var
FileHandle: Integer;
s , FileName : string;
begin
FileName := '***.TXT';
if FileExists(FileName) then
FileHandle := FileOpen(FileName, fmOpenReadWrite) // 開く
else
FileHandle := FileCreate(FileName,fmOpenReadWrite);
//
// ここに処理を書く
FileWrite(FileHandle, s, SizeOf(s));
//
FileClose(FileHandle);
end;
// ③
procedure TForm1.Button3Click(Sender: TObject);
var
SList : TStringList;
s , FileName : string;
begin
FileName := '***.TXT';
SList := TStringList.Create;
try
if FileExists(FileName) then
SList.LoadFromFile(FileName); // 開く
//
// ここに処理を書く
SList.Add(s);
//
SList.SaveToFile(FileName);
finally
SList.Free;
end;
end;
マサにミスだねさん、大豆くんさん
ありがとうございます。
大豆くんさんに記載していただいた ① の方で解決いたしました。
本当に初歩的なまちがいです。どこが悪いのか再確認してみます。
ツイート | ![]() |