W
wino
Unregistered / Unconfirmed
GUEST, unregistred user!
begin
FS_Tmp := TMemoryStream.Create ; // 以 MemoryStream 方式读取文件中的字符串
for i := 0 to StrList_Tmp.Count - 1 do // StrList_Tmp 为TStringList
begin
FS_Tmp.Clear;
Str_VN_Tmp := StrList_Tmp.Strings;
AssignFile(F, Str_VN_Tmp); // F为 File of Byte
Reset(F);
if FileSize(F) < 1000 then // 如果文件大小 < 1000 则 continue
begin
CloseFile(F);
Continue;
end;
CloseFile(F);
FS_Tmp.SetSize(256);
FS_Tmp.LoadFromFile(StrList_Tmp.Strings);
FS_Tmp.Seek(20, soFromBeginning); //设置路径字符串的起始点
FS_Tmp.ReadBuffer(Buf, 256); // 从文件开始部分读 256个字节
SetLength(Str_Ansi, 256);
CopyMemory(@Str_Ansi[1],@Buf, 256); //将Buf中的字符拷贝给 Str_Ansi
Str_Temp := ExtractFileName(Trim(Str_Ansi));
FS_Tmp.Seek(596, soFromBeginning); //设置文件中字符串的起始点
FS_Tmp.ReadBuffer(Buf, 32);
SetLength(Str_Ansi, 32); //将Buf中的字符拷贝给 Str_Ansi
CopyMemory(@Str_Ansi[1],@Buf, 32);
Str_Temp := Str_Temp + ',' + Trim(Str_Ansi);
end;
FS_Tmp.Free;
end;
以上代码我单步跟踪时,发现 for 循环中的 i 会出现大于 StrList_Tmp.Count - 1 的情况,如果注释掉和 FS_Tmp (一个TMemoryStream变量)相关的语句,就没出现上述的过界问题,不知道这问题是如何引起的,请高手指点一下,tks
FS_Tmp := TMemoryStream.Create ; // 以 MemoryStream 方式读取文件中的字符串
for i := 0 to StrList_Tmp.Count - 1 do // StrList_Tmp 为TStringList
begin
FS_Tmp.Clear;
Str_VN_Tmp := StrList_Tmp.Strings;
AssignFile(F, Str_VN_Tmp); // F为 File of Byte
Reset(F);
if FileSize(F) < 1000 then // 如果文件大小 < 1000 则 continue
begin
CloseFile(F);
Continue;
end;
CloseFile(F);
FS_Tmp.SetSize(256);
FS_Tmp.LoadFromFile(StrList_Tmp.Strings);
FS_Tmp.Seek(20, soFromBeginning); //设置路径字符串的起始点
FS_Tmp.ReadBuffer(Buf, 256); // 从文件开始部分读 256个字节
SetLength(Str_Ansi, 256);
CopyMemory(@Str_Ansi[1],@Buf, 256); //将Buf中的字符拷贝给 Str_Ansi
Str_Temp := ExtractFileName(Trim(Str_Ansi));
FS_Tmp.Seek(596, soFromBeginning); //设置文件中字符串的起始点
FS_Tmp.ReadBuffer(Buf, 32);
SetLength(Str_Ansi, 32); //将Buf中的字符拷贝给 Str_Ansi
CopyMemory(@Str_Ansi[1],@Buf, 32);
Str_Temp := Str_Temp + ',' + Trim(Str_Ansi);
end;
FS_Tmp.Free;
end;
以上代码我单步跟踪时,发现 for 循环中的 i 会出现大于 StrList_Tmp.Count - 1 的情况,如果注释掉和 FS_Tmp (一个TMemoryStream变量)相关的语句,就没出现上述的过界问题,不知道这问题是如何引起的,请高手指点一下,tks