所以,在开始之前,我一直在研究(不仅仅是Stack Overflow),我无法找到解决问题的方法。
我正在尝试使用Windows“CopyFile
功能将文件复制到某个位置(如果可能的话,在我复制它的同时更改其名称)。
我已经创建了一个示例程序来显示错误。
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
cout << "Copy in progress" << endl;
bool X = CopyFile(L"test.txt", L"C:\\", 1); //NOT C: nor C:\\
if (!X){ cout << "FALLO AL COPIAR\n"; cout << "Error: "<<GetLastError();}
else{ cout << "COPIADO CORRECTO"; }
cin.get(); cin.get();
return 0;
}
GetLastError()
返回3 - 这意味着ERROR_PATH_NOT_FOUND - 但是,相信我,我检查了每个文件(test.txt与构建的.exe位于同一个地方,我作为管理员运行... )它仍然给出了3。
我无法让它发挥作用。请注意 L “test”这是因为我使用Visual Studio进行了某些字符集设置,我试图更改该配置并使用“test.txt” - &gt;仍然是错误3。
答案 0 :(得分:2)
您需要提供文件名:
bool X = CopyFile(L"test.txt", L"C:\\test.txt", 1);
答案 1 :(得分:1)
您可以查看MSDN:
中的功能签名BOOL WINAPI CopyFile(
_In_ LPCTSTR lpExistingFileName,
_In_ LPCTSTR lpNewFileName,
_In_ BOOL bFailIfExists
);
我想,它不需要目标目录(例如cp
命令),而是整个文件名。提示:确保在调用CopyFile
时创建最终文件名之前的所有目录。
另一个提示:在POSIX系统上,你没有类似的例程(嗯,你在OS X上有类似的东西,但它是特定于操作系统的)。但是,这里有你可以做的事情(这就是CopyFile
实际在幕后工作的方式):
open
为POSIX打开两个文件句柄,或为CreateFile
打开Windows。打开一个句柄进行读取(源文件),打开另一个句柄进行写入(目标文件)。BUFSIZ
缓冲区大小通常就足够了。)这是它通常的工作方式,虽然特定于操作系统的例程可以通过一些黑魔法进行调整(例如,它们可以执行内存映射,将文件从一个描述符发送到另一个描述符而不退出内核模式等)。
答案 2 :(得分:0)
尝试:
CopyFile(L"test.txt", L"C:\\test.txt", 1);