LoadFromFileで200MB以上のファイルを読み込むためには?


アーク  2011-10-21 02:42:14  No: 41056

Delphi 2007を使用しています。
LoadFromFileを使用しているのですが、200MB以上のファイルを読み込むことができません。
現在は応急処置として、エラーメッセージを出して、分割してもらうようにしています。

200MB以上のファイルを読み込めるようにするにはどうしたら良いでしょうか?

宜しくお願いします。


アーク  2011-10-21 02:47:35  No: 41057

<追記>
TStringListの話です。


igy  2011-10-21 06:07:24  No: 41058

試したところ、普通に読み込めました。

Delphi2007
Windows7 Pro 32bit メモリ:2G


アーク  2011-10-21 18:44:07  No: 41059

igyさんありがとうございます。

私の環境も、メモリ:4Gの違いはあれど、「メモリが足りません。」と出ますね〜;;
エディタのようなものをつくろうと思っているのですが、かなり大きいファイルを読みこませるとエラーになりますね。

LoadFormFile以外に、コンポーネント等、おすすめのものがありましたら、書き込みお願いします。


アーク  2011-10-21 18:59:23  No: 41060

200MB以上と言っていますが、大きいなら大きいだけ読み込ませたいです。
(1GB以上の巨大ファイル対応)。


TAK906  2011-10-23 01:39:07  No: 41061

TStingListで大きなファイルを扱ってうまく行かなかった事があります、
固定長だったので 1行を  array[0..80] of char のように宣言し
TMemoryStream を使って処理して解決しましたけど。


monaa  2011-10-23 02:14:15  No: 41062

カキソースでメモリ超えを確認しました。(D2011 32bit)
Add、SaveToFileそれぞれ別の原因でメモリが足りなくなるようです。
改行の数も関係するようです。
そもそも、人間が読めるレベルの情報量では無いため私は気にしませんが。
このレベルのデータを扱う場合はTFileStream辺りを使って部分読み込みするしか無いと思います。

procedure TForm1.Button1Click(Sender: TObject);
var
  aStrList:TStringList;
  i: Integer;
begin
  aStrList:=TStringList.Create;
  try
  for i := 0 to 110000000 do   //118633501
    aStrList.Add('');
  except
    ShowMessage(IntToStr(i));
  end;
  aStrList.SaveToFile('test.txt');
  aStrList.Free;
end;


山本隆  2011-10-31 04:15:57  No: 41063

TStringListのソースコードを見てみると、SetCapacityメソッド中のReallocMem関数でEOutOfMemory例外が発生しているように思います。
Capacityプロパティであらかじめ十分なメモリを確保したらどうなりますか。


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

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






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