Delphi 2007を使用しています。
LoadFromFileを使用しているのですが、200MB以上のファイルを読み込むことができません。
現在は応急処置として、エラーメッセージを出して、分割してもらうようにしています。
200MB以上のファイルを読み込めるようにするにはどうしたら良いでしょうか?
宜しくお願いします。
<追記>
TStringListの話です。
試したところ、普通に読み込めました。
Delphi2007
Windows7 Pro 32bit メモリ:2G
igyさんありがとうございます。
私の環境も、メモリ:4Gの違いはあれど、「メモリが足りません。」と出ますね〜;;
エディタのようなものをつくろうと思っているのですが、かなり大きいファイルを読みこませるとエラーになりますね。
LoadFormFile以外に、コンポーネント等、おすすめのものがありましたら、書き込みお願いします。
200MB以上と言っていますが、大きいなら大きいだけ読み込ませたいです。
(1GB以上の巨大ファイル対応)。
TStingListで大きなファイルを扱ってうまく行かなかった事があります、
固定長だったので 1行を array[0..80] of char のように宣言し
TMemoryStream を使って処理して解決しましたけど。
カキソースでメモリ超えを確認しました。(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;
TStringListのソースコードを見てみると、SetCapacityメソッド中のReallocMem関数でEOutOfMemory例外が発生しているように思います。
Capacityプロパティであらかじめ十分なメモリを確保したらどうなりますか。
ツイート | ![]() |