需要文本文件,按字节大小分割,我在网上找了段代码(如下图所示),能实现对文本文件的分隔,但如果遇到双字节,就可能拆分这个双字节,造成部分乱码。看了很多资料,我认为如果能够判断指定位置的字节是不是双字节或单字节,就容易解决了。小弟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;
浙公网安备 33010602011771号