我正在更新C++例程来移动在Visual Studio Express 2008/2010中编写的文件。我现在运行VS Express 2012movefile()失败错误2或123
很明显,编译器有变化,因为字符串函数必须升级到strcpy_s等。没问题。这是一个控制台应用程序。我从来没有将我的C++知识扩展到C++之上,因为我需要的不仅仅是能够编写小型的utils来在命令行上执行操作。尽管如此,我仍然可以写出一些复杂的工具。
我的问题是movefile()函数总是无法移动,错误2或123.我正在C:\ users \ alan \ downloads文件夹中工作,所以我知道我有权限。我知道该文件在那里。一小段代码是:
char source=".\\test.txt"; // edited for clarity.
char dest=".\\test.txt1";
printf("\nMove\n %s\n to %s\n",source,dest); // just to see what is going on
MoveFile((LPCWSTR) source, (LPCWSTR) dest);
printf("Error %u\n",GetLastError());
输出为: 移动 \ test.txt的 到\ test.txt1 错误2
我所有的字符串是简单的字符的字符串和我。不完全确定,即使在阅读之后,LPCWSTR的类型是什么,如果这是罪魁祸首。所以要编译我只需键入我的字符串。它编译。但它仍然不会移动文件。
代码在开发源变量的源代码中更为复杂,但我已将它简化为一个简单的“仅向文件名追加1”的情况,以查看我是否可以简单地重命名它。我认为C:\ xxx \ yyy \ zzz \ test.txt在某些方面可能是错误的,但是通过上面的测试,这个想法下降了。我已经完成了,没有。\同样的问题。除了让我自己的fileopen读/写二进制函数替换movefile()之外,我的想法已经用完了。我真的反对,但如果我必须,我会的。
编辑:我粘贴从原来的代码使用FullPathName的printf,我已经纠正了片段。
你在任何常量字符串中使用单个反斜杠而不是两个连续反斜杠的机会?如果你希望用户能够在这里帮助你,那么你应该添加“在两个变量中放置字符串的代码”,以及“FullPathName”变量和“newfilename”变量的初始化题。 – 2014-11-02 14:55:44
您需要将char *转换为WCHAR *'MoveFile((CA2W(source),CA2W(dest));'或使用'MoveFileA' – 2014-11-02 14:59:55
@AlexFarber CA2W是ATL/MFC特有的,并且在VS Express版本中不可用 – 2014-11-02 15:03:53