我在Delphi中创建了一个工具来创建彩虹表.直到文件长达3.1 GB才行.我关闭了我的程序.然后我再次打开它,并在执行此代码时崩溃:
Assign(RainbowFile,'Rainbow_table.txt'); {assign a text file} Append(RainbowFile);
Delphi显示错误“引发了Exection类EInOutError与消息’I / O错误131′.@H_301_5@我的问题:如何将数据附加到大于2 GB的现有文件中.@H_301_5@//已过时@H_301_5@下一个问题:@H_301_5@我目前有代码:
Content_to_file := (#13+#10+Start_string+':'+hexstr(GTA_San_Andreas_CRC32(Start_string),8)); RainbowFile_handle.WriteBuffer( Content_to_file[1],Length(Content_to_file)*SizeOf(Char));
如何摆脱Content_to_file变量.如果可以的话,我想直接把它放到WriteBuffer.
编辑:
TFileStream适用于大于2 GB的文件.我现在测试了.@H_301_5@但是有可能这样写:
RainbowFile_handle.WriteBuffer( Start_string[1]+':',
我的意思是传递不变参数.还是我确定通过变量的第一个char?
编辑2:
我现在这样做:
Content_to_file := (#13+#10+Start_string+':'+hexstr(GTA_San_Andreas_CRC32(Start_string),8)); RainbowFile_handle.WriteBuffer( Content_to_file[1],Length(Content_to_file)*SizeOf(Char));
没有这个变量可以做到吗?
解决方法
你应该切换到流.
TFileStream
将处理这个没有问题.请注意,如果您使用随机访问,则必须确保使用64位版本的
Seek
和
Position
.
打开文件流后,您可以尝试到最后:
Stream.Seek(0,soEnd);
那么你可以这样写行:
procedure StreamWriteLine(Stream: TFileStream; Text: string); begin Text := Text + sLineBreak; Stream.WriteBuffer(Text[1],Length(Text)*SizeOf(Char)); end;
希望,这应该给你足够的线索填写其余的细节.