那些怪字符的文件是怎么写出来?我用TFileStream写文件,但写的不是怪字符,改了一下,能写怪字符了,但读不出来,大家帮我看看:
写文件:
procedure TForm1.Button1Click(Sender: TObject);
var
n,i: Integer;
f:TFileStream;
str:string;
begin
f := TFileStream.Create('000.txt',fmCreate);
try
for i:=0 to memo.Lines.Count-1 do
begin
str:=memo.Lines.Strings[i];
n:= Length(str);
f.Write(n,SizeOf(n));
f.Write(str[1],n);//此句改为f.Write(str,n); 写的就是怪字符
memo1.Lines.Add(inttostr(n)+': '+str) ;
end;
n:=0; //文件结束标志
f.Write(n,SizeOf(n)); //写入文件结束标志
finally
f.Free;
end;
end;
读文件:
procedure TForm1.Button2Click(Sender: TObject);
var
n:Integer;
f:TFileStream;
str:string;
begin
f:=TFileStream.Create('000.txt',fmOpenRead);
try
f.Read(n,SizeOf(n));
f.Position:=0;
while n<>0 do
begin
f.Read(n,SizeOf(n));
SetLength(str,n);
f.Read(str[1],n);
memo2.Lines.Add(inttostr(n)+': '+str) ;
end;
finally
f.Free;
end;程序如上:这样是可以写和读的,但是是可识别了。把f.Write(str[1],n);改为f.Write(str,n); 写的就是怪字符,然后把f.Read(str[1],n) 改为f.Read(str,n)后,有时只能正确的读出一行,有时一行也读不出来。
写文件:
procedure TForm1.Button1Click(Sender: TObject);
var
n,i: Integer;
f:TFileStream;
str:string;
begin
f := TFileStream.Create('000.txt',fmCreate);
try
for i:=0 to memo.Lines.Count-1 do
begin
str:=memo.Lines.Strings[i];
n:= Length(str);
f.Write(n,SizeOf(n));
f.Write(str[1],n);//此句改为f.Write(str,n); 写的就是怪字符
memo1.Lines.Add(inttostr(n)+': '+str) ;
end;
n:=0; //文件结束标志
f.Write(n,SizeOf(n)); //写入文件结束标志
finally
f.Free;
end;
end;
读文件:
procedure TForm1.Button2Click(Sender: TObject);
var
n:Integer;
f:TFileStream;
str:string;
begin
f:=TFileStream.Create('000.txt',fmOpenRead);
try
f.Read(n,SizeOf(n));
f.Position:=0;
while n<>0 do
begin
f.Read(n,SizeOf(n));
SetLength(str,n);
f.Read(str[1],n);
memo2.Lines.Add(inttostr(n)+': '+str) ;
end;
finally
f.Free;
end;程序如上:这样是可以写和读的,但是是可识别了。把f.Write(str[1],n);改为f.Write(str,n); 写的就是怪字符,然后把f.Read(str[1],n) 改为f.Read(str,n)后,有时只能正确的读出一行,有时一行也读不出来。
var
n,i: Integer;
f:TFileStream;
c:array[0..10] of char;
begin
c:='dd暗暗暗';
f := TFileStream.Create('000.txt',fmCreate);
try
f.Write(c,10);
finally
f.Free;
end;
end;
//读文件:
procedure TForm1.Button2Click(Sender: TObject);
var
n:Integer;
f:TFileStream;
c:array[0..10] of char;
str:string;
begin
f:=TFileStream.Create('000.txt',fmOpenRead);
try
f.Read(c,1000);
for n:=0 to 1000 do
str:=str+c[n];
memo2.Lines.Add(str) ;
finally
f.Free;
end;
end;