求求大哥们了,我对这个字符串用流的方法读写整整“研究”三天啦!头也昏了,
眼也花了,还是没搞明白这个“读“的问题,为什么读出来的总是一些不正常的
东西,要么是乱符,要么什么也没有,有时候还出错误!(读流发生错误),反
正不能正确读出我写入的字符,请求大哥们帮我看看代码,哪里出错了,写入流的
那部份不能改!只请你帮我把读取的那段代码改正确.小妹在线等,只要正确,马
上给分。
procedure TForm1.Button1Click(Sender: TObject);//写
var
str:string;
Fs:TFileStream;
begin
str:='爱你没商量';
try
Fs:=TFileStream.Create('c:\aaa.txt',fmCreate);
//Fs.WriteBuffer(pchar(str)^,Length(str));//你不能用这句
//Fs.WriteBuffer(str[1],Length(str));//你不能用这句
Fs.WriteBuffer(str,Length(str));//只能用这句
finally
Fs.free;
end;
end;procedure TForm1.Button2Click(Sender: TObject);//读
var
str:string;
fs:TFileStream;
begin
try
fs:=TFileStream.Create('c:\aaa.txt',fmOpenRead);
SetLength(str,fs.size);//长度
fs.ReadBuffer(str[1],fs.Size );
RichEdit1.Text :=str;//如何在这里正确读出"爱你没商量"
finally
fs.free;
end;
end;
眼也花了,还是没搞明白这个“读“的问题,为什么读出来的总是一些不正常的
东西,要么是乱符,要么什么也没有,有时候还出错误!(读流发生错误),反
正不能正确读出我写入的字符,请求大哥们帮我看看代码,哪里出错了,写入流的
那部份不能改!只请你帮我把读取的那段代码改正确.小妹在线等,只要正确,马
上给分。
procedure TForm1.Button1Click(Sender: TObject);//写
var
str:string;
Fs:TFileStream;
begin
str:='爱你没商量';
try
Fs:=TFileStream.Create('c:\aaa.txt',fmCreate);
//Fs.WriteBuffer(pchar(str)^,Length(str));//你不能用这句
//Fs.WriteBuffer(str[1],Length(str));//你不能用这句
Fs.WriteBuffer(str,Length(str));//只能用这句
finally
Fs.free;
end;
end;procedure TForm1.Button2Click(Sender: TObject);//读
var
str:string;
fs:TFileStream;
begin
try
fs:=TFileStream.Create('c:\aaa.txt',fmOpenRead);
SetLength(str,fs.size);//长度
fs.ReadBuffer(str[1],fs.Size );
RichEdit1.Text :=str;//如何在这里正确读出"爱你没商量"
finally
fs.free;
end;
end;
procedure WriteStrToStream(aStrValue: string; aStream: TStream);
var
vLen: Integer;
begin
vLen := Length(aStrValue);
aStream.WriteBuffer(vLen, SizeOf(vLen));
if vLen > 0 then
aStream.WriteBuffer(aStrValue[1], vLen);
end;procedure ReadStrFromStream(var aStrValue: string; aStream: TStream);
var
vLen: Integer;
begin
aStream.ReadBuffer(vLen, SizeOf(vLen));
if vLen > 0 then
begin
SetLength(aStrValue, vLen);
aStream.ReadBuffer(aStrValue[1], vLen);
end
else if vLen = 0 then
aStrValue := ''
else
raise Exception.Create('Error');
end;
Fs.WriteBuffer(str[1],Length(str));
应为delphi中的string和c++中的char[xx]是不同的,你直接保存str保存入的是一段无用的内存。
你代码里面用到了中括号,我最怕中括号和指针了,谢谢你给了我那么多代码
,不过不是我的正解。tonylk(tony):
写入的代码是绝对正确的,一:我见过别人写的代码,可惜没到读出代码,
二:这段写入代码是书上的一个例子,不过书上没有读出代码。
var
Target, Source: TFileStream;
MyFileSize: integer;
begin
try
Source := TFileStream.Create(SourceFile, fmOpenRead or fmShareExclusive);
Target := TFileStream.Create(TargetFile, fmOpenWrite or fmShareExclusive);
try
Target.Seek(0, soFromEnd); //往尾部添加资源
Target.CopyFrom(Source, 0);
MyFileSize := Source.Size + Sizeof(MyFileSize); //计算资源大小,并写入辅程尾部
Target.WriteBuffer(MyFileSize, sizeof(MyFileSize));
finally
Target.Free;
Source.Free;
end;
except
Result := False;
Exit;
end;
Result := True;
end; 其中参数SourceFile是要添加的文件, 参数TargetFile是被添加到的目标文件。比如说把a.exe添加到b.exe里面可以:Cjt_AddtoFile('a.exe', b.exe');如果添加成功就返回True否则返回假。
谈Delphi编程中“流”的利用
陈经韬
我全看过了,不能解决我的问题,谢谢你。
应该这样:
fs.writebuffer(str[1],length(str));