movefile()失败错误2或123

时间:2014-11-02 14:52:12

标签: c++

我正在更新c ++例程以移动使用visual studio express 2008/2010编写的文件。我现在正在运行VS Express 2012

显然编译器有变化,因为字符串函数必须升级到strcpy_s等没问题。这是一个控制台应用程序。我从未将C ++知识从C ++扩展到C#等,因为我只需要编写小的util来在命令行上执行操作。我仍然可以编写一些复杂的实用程序。

我的问题是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是什么类型的def' d,如果这是罪魁祸首。所以要编译它我只需输入我的字符串。它编译。但它仍然不会移动文件 代码在开发源和代码时更复杂。 dest变量,但我把它简化为一个简单的"只需在文件名中附加一个"情况,看看我是否可以简单地重命名它。我认为C:\ xxx \ yyy \ zzz \ test.txt可能在某种程度上是错误的,但是这个想法在上述测试中有所下降。无论有没有。\同样的问题我都做过。除了使用我自己的fileopen读/写二进制函数来替换movefile()之外,我的想法已经用完了。我真的反对,但如果我必须,我会。

编辑:我从使用FullPathName的原始代码粘贴了printf,我已经更正了该代码段。

2 个答案:

答案 0 :(得分:4)

您将参数转换为LPCWSTR这一事实表明您正在使用UNICODE定义编译程序,这意味着您正在调用MoveFileW并且编译器警告了参数类型不匹配。

插入演员表并不能解决问题。您告诉编译器停止抱怨,但您实际上没有解决问题(基础数据仍然是错误的)。

实际解决方案:

  1. 使用WCHAR作为MoveFileW期望(或TCHAR / LPTSTR_T宏。)
  2. 明确致电MoveFileA
  3. 在未定义UNICODE的情况下进行编译。

答案 1 :(得分:1)

感谢Andrew Medico。我使用了MoveFileA,程序似乎现在正常工作 我不确定我是否关闭了unicode,但我确实更改了属性中的一个项目。

我需要阅读有关unicode / ansi设置的编译器。但目前问题已得到解决,我确信我已经了解了我需要做的事情。 "研究" !!!!