关于C++的

来源:百度知道 编辑:UC知道 时间:2024/05/11 00:54:22
#include <windows.h>
int main()
{
char fn[90];
GetModuleFileName(NULL,fn,90);
CopyFile(fn,"%temp%\1.exe",FALSE);
system("pause");
return 0;
}

编译成功,为什么不能把自身复制到%temp%里呢?
fn的值是正确的,为什么不行呢?

你的CopyFile函数的返回值是false,这个函数调用失败了.
你在CopyFile函数后加一个DWORD d = GetLastError();
会得到d=123;这个错误代码,123 是"文件名、目录名或卷标语法不正确。",也就是说你给的"%temp%\1.exe"这个路径有问题

你这么写的问题就是系统认为\1是个转义字符,要用\\转义形式.

但在我机子上用"%temp%"是找不到系统默认临时文件夹的.还是用GetTempPath(...)函数得到临时文件夹路径名更安全些

int main(int argc, char* argv[])
{
char fn[90];
GetModuleFileName(NULL,fn,90);
DWORD d = GetLastError();
char fd[90];
GetTempPath(90, fd);
strcat(fd, "1.exe");
BOOL s = CopyFile(fn,fd,FALSE);
d = GetLastError();

system("pause");
return 0;
}//测试成功!

注意CopyFile的调用
CopyFile(fn, "%temp%\\1.exe",FALSE);漏了个斜杠,系统人为\1是个转义字符,而\\转义形式就是'\'

简单的实现方法
#include <windows.h>

int main(int argc, char *argv[]) {
CopyFileA(argv[0], "%temp%\\1.exe", FALSE);
return (0