需要文本文件,按字节大小分割,我在网上找了段代码(如下图所示),能实现对文本文件的分隔,但如果遇到双字节,就可能拆分这个双字节,造成部分乱码。看了很多资料,我认为如果能够判断指定位置的字节是不是双字节或单字节,就容易解决了。小弟delphi不是很熟悉,望各们大侠指点一下,万分感谢。
1 分割文件的函数
2 { 参数 1 是要分割的文件名; 参数 2 是要分割文件的大小, 单位是 KB }
3 { 分割后的文件名扩展名用序号替换 }
4 function SplitFile( const FileName: string; Size: Cardinal): Boolean;
5 var
6 fStream: TFileStream; { 原始文件 }
7 toStream: TMemoryStream; { 分文件 }
8 p,i: Integer; { p 记录当前指针位置; i 记录这是第几个分的文件 }
9 begin
10 Result := False;
11
12 Size := Size * 1024; { 把大小的单位转换为字节 }
13
14 fStream := TFileStream.Create(FileName, fmOpenRead);
15 p := 0;
16 i := 0;
17
18 toStream := TMemoryStream.Create;
19
20 while p < fStream.Size do
21 begin
22 toStream.Clear; { 清空上次数据 }
23 fStream.Position := p; { 放好指针位置 }
24
25 if fStream.Size-p < Size then Size := fStream.Size-p; { 最后一个时, 有多少算多少 }
26
27 toStream.CopyFrom(fStream, Size); { 复制 }
28 toStream.SaveToFile(FileName + ' . ' + IntToStr(i)); { 保存 }
29 Inc(i);
30 p := p + Size;
31 end;
32
33 fStream.Free;
34 toStream.Free;
35 Result := True;
36 end;
2 { 参数 1 是要分割的文件名; 参数 2 是要分割文件的大小, 单位是 KB }
3 { 分割后的文件名扩展名用序号替换 }
4 function SplitFile( const FileName: string; Size: Cardinal): Boolean;
5 var
6 fStream: TFileStream; { 原始文件 }
7 toStream: TMemoryStream; { 分文件 }
8 p,i: Integer; { p 记录当前指针位置; i 记录这是第几个分的文件 }
9 begin
10 Result := False;
11
12 Size := Size * 1024; { 把大小的单位转换为字节 }
13
14 fStream := TFileStream.Create(FileName, fmOpenRead);
15 p := 0;
16 i := 0;
17
18 toStream := TMemoryStream.Create;
19
20 while p < fStream.Size do
21 begin
22 toStream.Clear; { 清空上次数据 }
23 fStream.Position := p; { 放好指针位置 }
24
25 if fStream.Size-p < Size then Size := fStream.Size-p; { 最后一个时, 有多少算多少 }
26
27 toStream.CopyFrom(fStream, Size); { 复制 }
28 toStream.SaveToFile(FileName + ' . ' + IntToStr(i)); { 保存 }
29 Inc(i);
30 p := p + Size;
31 end;
32
33 fStream.Free;
34 toStream.Free;
35 Result := True;
36 end;