如何存取文件(任何文件)(100分)

  • 主题发起人 goodbegin
  • 开始时间
G

goodbegin

Unregistered / Unconfirmed
GUEST, unregistred user!
我想通过程序完成文件的存取,下面是我的一段拷贝程序,能生成新的文件,但新的文件大小是0K,请帮忙看问题在哪里?
var
F:Integer;
B:pChar;
BlockLen:Integer;
F1:Integer;
iFLen:Integer;
Pos:Integer;
begin
BlockLen:=1024;
F:=FileOpen(Edit1.Text,fmOpenRead);
iFLen:=Fileseek(F,0,2);
FileCreate(Edit1.Text+'1');
F1:=FileOpen(Edit1.Text+'1',fmOpenReadWrite);
Pos:=BLockLen;
while iFLen>Pos do
begin
B:=PChar(AllocMem(BlockLen));
FileRead(F,B,BlockLen);
FileWrite(F1,B,BlockLen);
Pos:=Pos+BlockLen;
end;
if Pos>=iFlen then
begin
BlockLen:=Blocklen-(Pos-iFLen);
B:=PChar(AllocMem(BlockLen));
FileRead(F,B,BlockLen);
FileWrite(F1,B,BlockLen);
end;
FileClose(F);
FileClose(f1);
我要实现这功能还有什么方法(不要CopyFileTo),谢谢
 
唉,用TStringList吧。
 
或者看blockread,blockwrite的帮助。
 
把下面的第一行去掉试试,如果用下面的语句,文件被打开了两次
FileCreate(Edit1.Text+'1');
F1:=FileOpen(Edit1.Text+'1',fmOpenReadWrite);
或者改成
  f1:=FileCreate(Edit1.Text+'1');
把第二句去掉
 
procedure CopyFile(SrcName, DstName: string);
const
BlockSize = 2048;
var
Buffer: array [0..BlockSize - 1] of Char;
f1, f2: TFileStream;
begin
f1 := TFileStream.Create(SrcName, fmOpenRead);
f2 := TFileStream.Create(DstName, fmCreate);

while f1.Read(Buffer, BlockSize) <> 0 do
f2.Write(Buffer, BlockSize);

f1.Free;
f2.Free;
end;

 
呵呵,有三个错误:
1. FileCreate(Edit1.Text+'1')
--1
F1:=FileOpen(Edit1.Text+'1',fmOpenReadWrite)
--2
改成 F1:=FileCreate(Edit1.Text+'1')
2句不要。
2. 在while 前加上Fileseek(F,0,2);
3 B:=PChar(AllocMem(BlockLen+1 ))
Pchar b 没有释放。.
copy file 有很多方法,你可以看看 《delphi 开发人员指南》上面的例子。
 
顶部