为什么COPYFILE函数不能拷贝生成新的文件?(50分)

  • 主题发起人 主题发起人 yangjj
  • 开始时间 开始时间
Y

yangjj

Unregistered / Unconfirmed
GUEST, unregistred user!
请看下面的代码,为什么这个函数不能拷贝生成新的文件?
procedure TmainForm.N5Click(Sender: TObject);
var
filename:string;
bn:integer;
begin
Application.CreateForm(Tfrmcreatfile, frmcreatfile);
frmCreatFile.showModal;
if bn=mrok then
filename:=ExtractFilePath(paramstr(0))+Inttostr(frmCreatFile.spinEdit1.value)+'.mdb';
if not fileexists(filename) then
begin
copyfile(PChar(extractfiledir(Application.exename)+'jhzb.mdb'),
PChar(extractfiledir(Application.exename)+filename),true);
messagebox(Handle,'本年度数据库文件新建成功','确定',
mb_ok or MB_ICONWARNING);
end
else
messagebox(Handle,'本年度数据库文件'+
#13#10+'已经存在,不用建立该年度文件。','警告',
mb_ok or MB_ICONWARNING);
exit;
end;
 
出什么错误提示,是不是文件在使用中?还是独享的?
 
用COPYFILE?还不如用文件流好。

if not fileexists(filename) then
begin
sourcefilestream:=Tfilestream.create(sourcefilename,fmopenread);
destfilestream:=tfilestream.create(destfilename,fmcreate);
destfilestream.copyfrom(sourcefilestream,sourcefilestream.size);
sourcefilestream.free;
destfilestream.free;
messagebox(Handle,'本年度数据库文件新建成功','确定',
mb_ok or MB_ICONWARNING);
end
else
messagebox(Handle,'本年度数据库文件'+
#13#10+'已经存在,不用建立该年度文件。','警告',
mb_ok or MB_ICONWARNING);
exit;
 
to djdsz, 我是要根据SPINEDIT1里的内容生成相应的文件名的。文件流不行吧!
 
to 枫,没有提示,程序运行正常,但就是不能拷出文件。
 
试一下:SHfileopration()
 
呵呵,到你可执行文件的上一级目录去看看有没有MDB文件吧。
 
试试这样:

copyfile(PChar(extractfiledir(Application.exename)+'/jhzb.mdb'),
PChar(extractfiledir(Application.exename)+ '/' +filename),true);

即多两个“/”号,因为extractfiledir取出的路径是不带最后的“/”的,自然找不到
你要拷贝的文件,也不会出错。
 
肯定已经生成了,只不过不知道放在哪了,你用查找试试
 
查一文件下路径有没有错,昨天我刚试过这个函数,没有问题。
 
to 林旭斌,文件路径没有问题。
 
同意,copyfile是很简单,不要搞得 太复杂。。。。加“/”就可以了
:duckstar
 
'filename:=ExtractFilePath(paramstr(0))+Inttostr(frmCreatFile.spinEdit1.value)+'.mdb';
if not fileexists(filename) then
begin
copyfile(PChar(extractfiledir(Application.exename)+'jhzb.mdb'),
PChar(extractfiledir(Application.exename)+filename),true)'
filename中好象已经包括了路径,而不是单独的文件名称,上述最后一行好象又包括了一个
路径'extractfiledir(Application.exename)',我想加上filename后可能这个路径不存在吧?
我没试,瞎想的。
 
我的问题已经解决,代码如下:
if bn=mrok then
filename:=IntToStr(frmCreatFile.spinEdit1.value)+'.mdb';
if fileExists(ExtractFilePath(Application.exename)+'/data/'+IntToStr(frmCreatFile.spinEdit1.value)+'.mdb') then
begin
messagebox(Handle,'本年度数据库文件已经存在,'+
#13#10+''+#13#10+'不用建立该年度文件。','确定',
mb_ok or MB_ICONWARNING);
exit;
end
else
copyfile(PChar(ExtractFilePath(Application.exename)+'/data/jhzb.mdb'),
PChar(ExtractFilePath(Application.exename)+'/data/'+IntToStr(frmCreatFile.spinEdit1.value)+'.mdb'),true);
messagebox(Handle,'本年度数据库文件新建成功','确定',
mb_ok or MB_ICONWARNING);
你们都没有解答对,但只要有人关注就有分,不管怎么说都谢谢你们了!
 
多人接受答案了。
 
copyfile(PChar(ExtractFilePath(Application.exename)+'/data/jhzb.mdb'),
PChar(ExtractFilePath(Application.exename)+'/data/'+IntToStr(frmCreatFile.spinEdit1.value)+'.mdb',false);
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部