将一字符串用filestream.write方法写入一文件
用filestream.read方法从文件读入一字符串中,结果不对,这是怎么回事?
//将一字符串存入文件 将26个字母写入一文件,这个过程正常
procedure TForm1.Button1Click(Sender: TObject);
var
a:TFileStream;
Str:String;
begin
Str:='abcdefghijklmnopqrstuvwxyz';
a:=TFileStream.Create('001',fmCreate);
a.Write(Str,Length(Str));
a.Free;
end;//将一文件里的内容读入字符串 这个过程结果不对
procedure TForm1.Button2Click(Sender: TObject);
var
a:TFileStream;
Str,tmp:String;
i:Integer;
begin
a:=TFileStream.Create('001',fmOpenRead);
a.Position:=0;
while true do
begin
setLength(tmp,11); //设置tmp的大小
a.Read(tmp[1],10); //考虑到可能会读入大文件,进行分段读取,一次读取10个字符
Str:=Str+tmp; //保存进Str
if a.Position>=a.Size then break; //如果到文件结尾了,则退出
end;
a.Free;
ShowMessage(Str); //Str的结果不对,是乱码,而不是26个字母
end;
用filestream.read方法从文件读入一字符串中,结果不对,这是怎么回事?
//将一字符串存入文件 将26个字母写入一文件,这个过程正常
procedure TForm1.Button1Click(Sender: TObject);
var
a:TFileStream;
Str:String;
begin
Str:='abcdefghijklmnopqrstuvwxyz';
a:=TFileStream.Create('001',fmCreate);
a.Write(Str,Length(Str));
a.Free;
end;//将一文件里的内容读入字符串 这个过程结果不对
procedure TForm1.Button2Click(Sender: TObject);
var
a:TFileStream;
Str,tmp:String;
i:Integer;
begin
a:=TFileStream.Create('001',fmOpenRead);
a.Position:=0;
while true do
begin
setLength(tmp,11); //设置tmp的大小
a.Read(tmp[1],10); //考虑到可能会读入大文件,进行分段读取,一次读取10个字符
Str:=Str+tmp; //保存进Str
if a.Position>=a.Size then break; //如果到文件结尾了,则退出
end;
a.Free;
ShowMessage(Str); //Str的结果不对,是乱码,而不是26个字母
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a:TFileStream;
Str:String;
begin
Str:='abcdefghijklmnopqrstuvwxyz';
a:=TFileStream.Create('001',fmCreate);
a.Write(Str[1],Length(Str));///***
a.Free;
end
读,你的代码可能也行,不过一般的不象你这样作的procedure TForm1.Button2Click(Sender: TObject);
var
a:TFileStream;
Str,tmp:String;
i, iReaded:Integer;
begin
a:=TFileStream.Create('001',fmOpenRead);
a.Position:=0;
setLength(tmp,11); //设置tmp的大小
while true do
begin
//setLength(tmp,11); //****有不着每次都设置吧??
iReaded := a.Read(tmp[1],10); //考虑到可能会读入大文件,进行分段读取,一次读取10个字符
///Str:=Str+tmp; //保存进Str
///if a.Position>=a.Size then break; //如果到文件结尾了,则退出
Str := Str + Copy(tmp, 1, iReaded);
if iReaded < 10 then
Break;//如果读取不足以缓冲的大小,那说明已经读完了
end;
a.Free;
ShowMessage(Str); //Str的结果不对,是乱码,而不是26个字母
end;