各位看官:
我想测试以上两个例程的用法,所以程序功能可能并无用处或有其他解决方法,我只想知道为什么用以下方法不能成功。
功能描述:将文本文件A中的数据拷贝到文本文件B。
我的想法:用ReadBuffer写入Buffer,在将Buffer数据存入文本文件B。使用TFileStream对象实现功能。
报错描述:产生EWriteError错误。
程序代码://在TMainForm窗体中点击按钮Direct1时发生以下代码描述的事件
procedure TMainForm.Direct1Click(Sender: TObject);
var
ReadStrm, WriteStrm : TFileStream;
Buffer : PChar;
intSize : Integer;
begin
ReadStrm := TFileStream.Create('ReadFile.xkl', fmOpenRead);
WriteStrm := TFileStream.Create('WriteFile.xkl', fmCreate);
intSize := ReadStrm.Size;
ReadStrm.Position := 0;
WriteStrm.Position := 0;
//采用直接复制法可以实现拷贝功能
//WriteStrm.CopyFrom(ReadStrm, ReadStrm.Size); //采用间接复制法,却报EWriteError错误
GetMem(Buffer, intSize);
ReadStrm.ReadBuffer(Buffer, intSize);
WriteStrm.WriteBuffer(Buffer^, intSize);
FreeMem(Buffer);
FreeAndNil(ReadStrm);
FreeAndNil(WriteStrm);
end;
我想测试以上两个例程的用法,所以程序功能可能并无用处或有其他解决方法,我只想知道为什么用以下方法不能成功。
功能描述:将文本文件A中的数据拷贝到文本文件B。
我的想法:用ReadBuffer写入Buffer,在将Buffer数据存入文本文件B。使用TFileStream对象实现功能。
报错描述:产生EWriteError错误。
程序代码://在TMainForm窗体中点击按钮Direct1时发生以下代码描述的事件
procedure TMainForm.Direct1Click(Sender: TObject);
var
ReadStrm, WriteStrm : TFileStream;
Buffer : PChar;
intSize : Integer;
begin
ReadStrm := TFileStream.Create('ReadFile.xkl', fmOpenRead);
WriteStrm := TFileStream.Create('WriteFile.xkl', fmCreate);
intSize := ReadStrm.Size;
ReadStrm.Position := 0;
WriteStrm.Position := 0;
//采用直接复制法可以实现拷贝功能
//WriteStrm.CopyFrom(ReadStrm, ReadStrm.Size); //采用间接复制法,却报EWriteError错误
GetMem(Buffer, intSize);
ReadStrm.ReadBuffer(Buffer, intSize);
WriteStrm.WriteBuffer(Buffer^, intSize);
FreeMem(Buffer);
FreeAndNil(ReadStrm);
FreeAndNil(WriteStrm);
end;
解决方案 »
- A,,B两张表字段结构一样。求一条简单的SQL语句。把A表中的一条记录插入B表
- 请问: TStringList.VALUES 表示什么?怎么用?
- 请问如何用ado在程序中建一张dbase的临时表?
- Delphi 7在windows 2003 server 下连接Sybase 数据库的问题。
- 请教各位!在线等待!急!!!
- ****怎样取出stringgrid中某个单元格的颜色??********
- 高分求救,关于关闭内嵌的外部程序的问题
- 奇怪的多条重复记录的问题
- delphi里面怎么调用别的程序啊
- 如何动态检测是否已联网?
- 如何向Application发送按键消息
- 求助三层中动态链接库文件,放在什么路经下。
var
ReadStrm, WriteStrm : TFileStream;
Buffer : PChar;
intSize : Integer;
begin
ReadStrm := TFileStream.Create('c:\csb.log', fmOpenRead);
WriteStrm := TFileStream.Create('c:\a.txt', fmCreate);
intSize := ReadStrm.Size;
ReadStrm.Position := 0;
WriteStrm.Position := 0;
//采用直接复制法可以实现拷贝功能
//WriteStrm.CopyFrom(ReadStrm, ReadStrm.Size); //采用间接复制法,却报EWriteError错误
GetMem(Buffer, intSize);
ReadStrm.ReadBuffer(Buffer^, intSize); //Buffer^, 而非Buffer
WriteStrm.WriteBuffer(Buffer^, intSize);
FreeMem(Buffer);
FreeAndNil(ReadStrm);
FreeAndNil(WriteStrm);
改成
WriteStrm.WriteBuffer(@Buffer^, intSize);
实践证明,meiqingsong(阿飛) 的写法是正确的,而bee2518(迷茫ing)的写法将产生新的错误。非常感谢两位的热心。