请问我的CopyFile为什么出错?(50分)

  • 主题发起人 主题发起人 Iveny
  • 开始时间 开始时间
I

Iveny

Unregistered / Unconfirmed
GUEST, unregistred user!
我用edit1.text := extractfiledir(OpenDialog1.FileName);的值作为路径
CopyFile(Pchar('YW.txt'), pchar(Edit1.Text + '/MB.txt'), False);
为什么复制不了?(123.txt和程序在同一目录下,我手动在Edit1里输入同样的
路径却可以复制)

请帮忙!
 
顺序错了,

CopyFile(pchar(Edit1.Text + '/MB.txt'),Pchar('YW.txt'), False);
 

copy(原文件,目标文件,false);
 
遇到问题,要养成先查查帮助的习惯
The CopyFile function copies an existing file to a new file.

BOOL CopyFile(

LPCTSTR lpExistingFileName, // address of name of an existing file
LPCTSTR lpNewFileName, // address of filename to copy to
BOOL bFailIfExists // flag for operation if file exists
);
Parameters

lpExistingFileName

Points to a null-terminated string that specifies the name of an existing file.

lpNewFileName

Points to a null-terminated string that specifies the name of the new file.

bFailIfExists

Specifies how this operation is to proceed if a file of the same name as
that specified by lpNewFileName already exists. If this parameter is TRUE
and the new file already exists, the function fails. If this parameter is
FALSE and the new file already exists, the function overwrites the existing
file and succeeds.

Return Value

If the function succeeds, the return value is TRUE.
If the function fails, the return value is FALSE. To get extended error
information, call GetLastError.
 
To:hnzgf,顺序没有错,因为程序运行后手动在Edit1里输入路径却可以复制!
To:scorpions,你的命令编译都失败啊?!
To:YunEr,帮助我早就看了,我的语句应该没有问题,因为程序运行后手动在Edit1
里输入路径却可以复制,用extractfiledir(OpenDialog1.FileName)的方式自动添加数据
时,就不能复制了!我猜想,应该是extractfiledir(OpenDialog1.FileName)传送数据给
Edit1这里出问题了!

请问我的语句,哪里出问题了?
 
记不清楚了,好象要加{I+}COPYFILE{I-},再看看帮助吧。
 
是不是复制根目录下的文件了?试试

edit1.text := ExtractFilePath(OpenDialog1.FileName);
CopyFile(Pchar('YW.txt'), pchar(Edit1.Text + 'MB.txt'), False);
 
我试过了,不行!
 
stmp := edit1.text;
if stmp[length(stmp)]<>'/' then edit1.text := edit1.text + '/';
copyfile......
 
奇怪,我运行你的怎么不会出错?你的错误消息是什么?也许是你的文件的问题。
extractfiledir(OpenDialog1.FileName)就是得到你选择的目录呀,你若有怀疑,可以设个
断点来看看,是否那儿出错。
 
使用extractfilepath(opendialog1.filename)
try it
 
To:haoyi,我大概知道你的stmp[length(stmp)]<>'/' 的意思,但length不是返回
字符串的动态长度吗?!可以判断stmp里面有没有字符/的?
 
length(stmp)是取字串的长度,而stmp[XX]是取字串中某一位的字符,联
合起来用就是取最后一位字符。
 
'YW.txt', 原文件应该带路径,否则不知去那找原文件

没原文件,那来的 Copy??????

 
根目录的问题吧,呵呵
 
pchar(Edit1.Text + '/MB.txt'), 错了,应该用ExtractFilePath
为什么,因为ExtractFileDir返回值是不带'/'字符的,所以你看
extractfiledir('c:/a.txt')+'a.txt'
结果是c:/a.txt
extractfiledir('c:/windows/notepad.exe'+'a.txt')
结果是'c:/windows'+'a.txt'=c:/widnowsa.txt 当然就错了。

用ExtractfilePath
 
to cch_b
ExtractFilePath 与 ExtractFileDir 的不同之处确实是带与不带 '/'

但原来提出的问题是:
edit1.text := extractfiledir(OpenDialog1.FileName);的值作为路径
// 如果 OpenDialog1 选的是:c:/a.txt 则edit1.text 显示为: c:/
// 如果 OpenDialog1 选的是:c:/a/a.txt 则edit1.text 显示为: c:/a

CopyFile(Pchar('YW.txt'), pchar(Edit1.Text + '/MB.txt'), False);
// 因此:Pchar(Edit1.Text + '/MB.txt') 得的结果是:c://MB.txt 或 c:/a/MB.txt

因此,问题仍是copyfile(Pchar('YW.txt'),pchar(edit1.text + '/MB.txt'),false)
中的 YW.txt 的路径不一定对所致。
解释如下:
当用OpenDialog 后,当前路径已变为它所选的路径(我不知道他的123.txt是不
是原文件),如是,则应该就是这个毛病。

对了吗? 快把分给我,,,,好高兴!!!!!
 
to Iveny

如果还想继续讨论,请将问题提前,否则请结束贴子

谢谢!!!
 
var
a:pchar;//原文件路径
b:pchar;//目标文件路径
begin
getmem(a,100);
getmem(b,100);

strpcopy(a,'c:/test.txt');
strpcopy(b,'d:/test2.txt');

copyfile(a,b,false);

freemem(a,100);
freemem(b,100);

end;

我试过没问题。
string和pchar不能相加。用strpcopy把string赋给pchar。
 
终于解决了我的问题了!
 
后退
顶部