关于流的读写问题,文件流 (100分)

L

lah998

Unregistered / Unconfirmed
GUEST, unregistred user!
求求大哥们了,我对这个字符串用流的方法读写整整“研究”三天啦!头也昏了,
眼也花了,还是没搞明白这个“读“的问题,为什么读出来的总是一些不正常的
东西,要么是乱符,要么什么也没有,有时候还出错误!(读流发生错误),反
正不能正确读出我写入的字符,请求大哥们帮我看看代码,哪里出错了,写入流的
那部份不能改!只请你帮我把读取的那段代码改正确.小妹在线等,只要正确,马
上给分。


procedure TForm1.Button1Click(Sender: TObject);//写
var
str:string;
Fs:TFileStream;
begin
//str:='爱你没商量';//不用这种方式
str:=RichEdit1.Text;//在这个RichEdit1里写入 '爱你没商量';
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 );
RichEdit2.Text :=str;//如何在这里正确读出"爱你没商量"
finally
fs.free;
end;
end;
 
小妹?[:D][:D][:D]
我帮你看看是怎么个“爱你没商量”哈!
 
小妹啊[:D][:D][:D]
你这个读应该来说是正确的,但写就不正确了,应该这样:
Fs.WriteBuffer(Pointer(str)^,Length(str));//只能用这句
另外读最好也换成这样:
SetLength(str,fs.size);//长度
fs.ReadBuffer(Pointer(str)^,fs.Size );
因为如果你的fs.size为0的时候,str[1]是没意义的。
 
xianjun:
你这种方法写进去的这个文件,是可以用win自带的记事本打开可以看到里面的内容
所以你还没有真正解决我的问题,不过还是谢谢你给我一些提示。
我的QQ147739389,可以聊吗?
 
procedure TForm1.Button1Click(Sender: TObject);//写
var
str:string;
Fs:TFileStream;
vLen:Integer;
begin
//str:='爱你没商量';//不用这种方式
str:=RichEdit1.Text;//在这个RichEdit1里写入 '爱你没商量';
try
Fs:=TFileStream.Create('c:/aaa.txt',fmCreate);
//Fs.WriteBuffer(pchar(str)^,Length(str));//你不能用这句
//Fs.WriteBuffer(str[1],Length(str));//你不能用这句
vLen := Length(str);
Fs.WRiteBuffer(vLen, SizeOF(vLen));
if vLen > 0 then
Fs.WriteBuffer(str[1], vLen);
finally
Fs.free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);//读
var
str:string;
fs:TFileStream;
vLen:Integer;
begin
try
fs:=TFileStream.Create('c:/aaa.txt',fmOpenRead);
fs.ReadBuffer(vLen, SizeOf(vLen));
if vLen > 0 then
begin
SetLength(str,vLen);//长度
fs.ReadBuffer(str[1],vLen );
end;
RichEdit2.Text :=str;//如何在这里正确读出"爱你没商量"
finally
fs.free;
end;
end;
 
chillkwanjane,:谢谢你给我写这么长的代码,不过你也没有解决我的问题,用windows的
记事本可以看到里面的东东。
 
你得代码里 这行有问题
Fs.WriteBuffer(str,Length(str));//只能用这句
应该改为
if Length(str) > 0 then fs.WriteBuffer(str[1], Lenght(str));


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
RichEdit2: TRichEdit;
Button1: TButton;
Button2: TButton;
RichEdit1: TRichEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);//写
var
str:string;
Fs:TFileStream;
begin
//str:='爱你没商量';//不用这种方式
str:=RichEdit1.Text;//在这个RichEdit1里写入 '爱你没商量';
try
Fs:=TFileStream.Create('c:/aaa.txt',fmCreate);
//Fs.WriteBuffer(pchar(str)^,Length(str));//你不能用这句
//Fs.WriteBuffer(str[1],Length(str));//你不能用这句
if Length(str) > 0 then Fs.WriteBuffer(str[1],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 );
RichEdit2.Text :=str;//如何在这里正确读出"爱你没商量"
finally
fs.free;
end;
end;
end.
 
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;

try
fs:=TFileStream.Create('c:/aaa.txt',fmOpenRead or fmShareDenyNone)
//保险点,只要文件存在并且不是被别人以独占方式打开了我就能打开读
SetLength(str,fs.size);//长度
fs.ReadBuffer(str[1],fs.Size );
RichEdit2.lines.Text :=str
// 可以正确显示
finally
fs.free;
end;
 
小妹呀, 这“爱你没商量”又不是见不得人的事,干嘛不让人看呢?
想不让人看就加密一下
 
RichEdit2->LoadFromStream(Stream);


可爱的妹妹,给分吧
 
也许对你有帮助
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1402185
 
各位还是没有真正解决我的问题,不过给了我很多关于流的知识,谢谢你们了,一位大侠
在QQ里告诉了我如何读流了,下面这样写是完全可以的而且是可以读出的!
str:='爱你没商量';
Fs.WriteBuffer(str,Length(str));
 
顶部