你说的问题,我刚好前几天遇到了。以下经我亲手测试:FileStream虽然是不错的方法,但是存在乱码的问题,而且内存占用较多。StringList虽然是不错的方法,但是大文件慢的很。ReadLn是不错的方法,不出现乱码,内存占用小,而且速度很快。你读取多少是你自己说了算,但是用ReadLn只能一行一行读取,一行是指由回车和换行的地方可以认为是一行,否则读取的数据大约是4K左右。例如你要生成一页的文字大小是10K,那么,你通过ReadLn分多次读取,直到读出的数据大于10K,剩下的就是下一页循环的问题了。根据我的测试,你要读取一个10K左右的文档,一般来说读到的数据是11K左右。而且你用同样的方法,分割同一个文件,每次分割出的文件都是相同的看看我的代码,希望有帮助:procedure TFrmMain.BtnRunClick(Sender: TObject);var StrFile: string; FileSize: integer; CutSize: integer; i, Residual: integer; StrFileName, StrFilePath: string; RealSize: integer; SourTxt, DestTxt: TextFile; s: string;begin StrFile := EdtFile.Text; if Trim(StrFile) = '' then begin State := '请先选择一个Txt类型的文件'; Exit; end; if Trim(EdtFileSize.Text) = '' then begin State := '不能获取所选文件的大小'; Exit; end; try FileSize := StrToInt(EdtFileSize.Text); CutSize := StrToInt(EdtCutSize.Text); except State := '不正确的文件大小'; Exit; end; //所选文件不可超过100M if FileSize > 100 * 1023 then begin State := '所选择的文件太大,不被支持'; Exit; end; //所选文件太小,不分割 if FileSize < 50 then begin State := '所选择的文件太小,不需要分割'; Exit; end; //分割的文件大小不得超过1M if (CutSize < 50) or (CutSize > 1024) then begin State := '不正确的分割文件大小'; Exit; end; StrFileName := ExtractFileName(StrFile); StrFileName := ChangeFileExt(StrFileName, ''); StrFilePath := ExtractFilePath(StrFile) + StrFileName + '//'; if not DirectoryExists(StrFilePath) then CreateDir(StrFilePath); State := '正打开文件...'; AssignFile(SourTxt, StrFile); ReSet(SourTxt); Run := true; i := 1; while (not Eof(SourTxt)) and Run do begin State := '正生成第【' + IntToStr(i) + '】个文件...'; StrFile := StrFilePath + StrFileName + IntToStr(i) + '.txt'; if FileExists(StrFile) then DeleteFile(StrFile); AssignFile(DestTxt, StrFile); ReWrite(DestTxt); Residual := 0; while (Residual < CutSize * 1024) and (not Eof(SourTxt)) do begin s := ''; ReadLn(SourTxt, s); if s = '' then continue; RealSize := Length(s); WriteLn(DestTxt, s); Residual := Residual + RealSize; end; CloseFile(DestTxt); inc(i); end; CloseFile(SourTxt); if Run then State := '文件分割完毕,共创建【' + IntToStr(i - 1) + '】个文件...' else State := '用户停止分割文件...'; Run := false;end;