急死我了。。哪位大虾帮帮了。。。。 : 关于SaveDialog 和 Copyfile函数。。。 在线等,各位大哥大姐指点一下。。。。 ( 积分:

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

giszpp

Unregistered / Unconfirmed
GUEST, unregistred user!
急死我了。。哪位大虾帮帮了。。。。 : 关于SaveDialog 和 Copyfile函数。。。 在线等,各位大哥大姐指点一下。。。。 ( 积分: 30 )<br />看下面一段代码,为什么SaveDialog显示后,Copyfile函数就出错? 我试过了,如果把Savedialog.execute;屏蔽掉 或者 显示后点取消,能够正常copy文件,但是如果显示后填入一文件名,即使后面的Copyfile函数和Savedialog无关,也不能实现Copy,
不解不解,望指点。。。。。。。
procedure TForm1.Button1Click(Sender: TObject);
var
tempstr:string;
begin
if not SaveDialog1.Execute then exit;
//tempstr:=SaveDialog1.FileName;
if CopyFile('source.txt','c:/back.txt',false) then
showmessage('备份成功')
else
showmessage('备份失败');
end;
 
看下面一段代码,为什么SaveDialog显示后,Copyfile函数就出错? 我试过了,如果把Savedialog.execute;屏蔽掉 或者 显示后点取消,能够正常copy文件,但是如果显示后填入一文件名,即使后面的Copyfile函数和Savedialog无关,也不能实现Copy,
不解不解,望指点。。。。。。。
procedure TForm1.Button1Click(Sender: TObject);
var
tempstr:string;
begin
if not SaveDialog1.Execute then exit;
//tempstr:=SaveDialog1.FileName;
if CopyFile('source.txt','c:/back.txt',false) then
showmessage('备份成功')
else
showmessage('备份失败');
end;
 
copyfile的参数是phcar类型,所以你要转换一下:
copyfile('source.txt',pchar(SaveDialog1.filename));
 
procedure TForm1.Button1Click(Sender: TObject);
var
tempstr:string;
begin
if not SaveDialog1.Execute then exit;
if CopyFile(PChar(SaveDialog1.FileName),'c:/back.txt',false) then
showmessage('备份成功')
else
showmessage('备份失败');
end;

以上一点问题也没有。D7
可能其它控件影响了它,比如VCLSkin
 
兰兰……
 
狂吐……
 
To:东兰梦舞
没有用其他任何第三方控件:(

不信可以试一下,新建一个工程,然后放一个 Button和 Savedialog,然后对Button编写如下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
SaveDialog1.Execute;
if CopyFile('source.txt','c:/back.txt',false) then
showmessage('备份成功')
else
showmessage('备份失败');
end;

运行程序显示Savedialog时随便输入一个文件名(后面的Copyfile函数和Savedialog没有关系),然后就出现“备份文件失败!”,但是如果显示SaveDialog时取消,就能“备份文件成功”。
真的很晕,》》》》why?????
 
555555555555....[?][?]
 
GetLastError看看

另外打开SaveDialog以后,当前目录就变了,所以源目标就需要是完整路径

也就是用Source.txt是不行的,需要加路径
 
十分感谢 chenybin,,问题已解决!
::把源代码改为下面就行了,呵呵。。。。
procedure TForm1.Button1Click(Sender: TObject);
var
path:string;
begin
path:=ExtractFilePath(ParamStr(0));
SaveDialog1.Execute;
if CopyFile(pchar(path+'source.txt'),'c:/back.txt',false) then
showmessage('备份成功')
else
showmessage('备份失败');
end;
 
我进行了实验:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
SaveDialog1.Execute;
if CopyFile('D:/Documents and Settings/w/桌面/披着羊皮的狼.txt',
'c:/back.txt',false) then
showmessage('备份成功')
else
showmessage('备份失败');
end;

这个我实验过了,不管Savedialog怎么选,都不会防碍CopyFile进行文件复制.

希望楼主注意看看你的'source.txt'文件在当前目录下是否存在??

我写的带路径的这个没有问题!!
 
倒,干嘛把分给我? 我们无怨无仇,可别害我呀~ [:(]
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3156736
 
得注意拷贝文件的路径问题撒,今天我也遇到了这个了,都用绝对的路径!
 
谢谢各位参与,先总结如下:

To:刘麻子
不是我害你,你的魅力值也太高了,我记得当时给分的时候是要给chenybin的,可不知道怎么回事就给了刘麻子,虽然分不多,可对不起chenybin了,还是十分感谢chenybin,感谢刘麻子以及各位的参与

To:无泪
我的程序出错是相对路径的问题,由于Savedialog.execute后,当前目录改变了(chenybin语,呵呵。。),所有再用相对路径就出错了,如果用绝对路径就不存在这个问题了,呵呵

谢谢各位,呵呵。。。。。。。。。
 
多人接受答案了
 
单人接受答案了
 

Similar threads

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