ファイルを作成するには?

解決


わんこ  2005-06-13 05:53:11  No: 15577

発信ミスで上の質問文が途中できれてしまいました。すみません。
ファイルの作成でお伺いします。
下記のような記述でファイルが存在しない時に'A'で作成したとき
'B'でエラーが発生してとまります。
かなり初歩的なことだと思うのですが、、、
どこが悪いのでしょうか?

if FileExists('***.TXT')=False then begin
  FileCreate('***.TXT');      //-------'A'
end;
Assign(F,'***.TXT');
ReWrite(F);          //------'B'ここでエラーがでてとまる


マサにミスだね  2005-06-13 06:49:52  No: 15578

エラーの原因は、ファイル管理ルーチンの混同。
FileCreate関数の戻り値(OSファイルハンドル)と Pascalファイル変数(F)は まったく別物なので、ヘルプで再確認を。


大豆くん  2005-06-13 06:52:41  No: 15579

関数を混同しているようですね。
昔から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;


わんこ  2005-06-13 07:15:25  No: 15580

マサにミスだねさん、大豆くんさん
ありがとうございます。
大豆くんさんに記載していただいた ①  の方で解決いたしました。
本当に初歩的なまちがいです。どこが悪いのか再確認してみます。


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

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






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