掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ファイルの入出力について (ID:11746)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
データの追加に難儀してますね。 論理を単純にすると本質が見えてくることが多いです。 ファイルにデータを追加して行くのに最も効率がいいのは TFileStream を 使うことです。データが文字列だとして、一行づつ追加していく例を示します。 var counter:integer; procedure TForm1.Button1Click(Sender: TObject); var fs:TFileStream; fn,s:string; begin fn := 'c:\TestData.txt'; if FileExists(fn) then fs := TFileStream.Create(fn,fmOpenReadWrite or fmShareDenyWrite) else fs := TFileStream.Create(fn,fmCreate or fmShareDenyWrite); try s := 'data : '+IntToStr(counter)+#13#10; // 改行を入れておく Inc(counter); fs.Seek(0,soFromEnd);// ファイルの末尾にシークして移動 fs.Write(PChar(s)^,Length(s)); // データを追加 finally fs.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); begin Memo1.Lines.LoadFromFile('c:\TestData.txt');// モニタ end; Button1 を押すたびに1行ずつ増えていくのが Button2 を押すと見えるでしょう。 TStringList をつかうと、全部読み込んで1行追加し、それから全部上書きすること になりコードは簡単ですが、効率は良くありません。こんな感じです。 procedure TForm1.Button3Click(Sender: TObject); var sl:TStringList; fn,s:string; begin fn := 'c:\TestData.txt'; sl := TStringList.Create; try if FileExists(fn) then sl.LoadFromFile(fn); s := 'data : '+IntToStr(counter); Inc(counter); sl.Add(s); // データ追加。この場合は改行は自動的につく sl.SaveToFile(fn); finally sl.Free; end; end; やはり、Button3 を押してから Button2 を押して一行ずつ増えていくのが見てえるでしょう。 繰り返しますが、やりたいことの本質を見極めるには論理を単純化するといいです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.