首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >movefile()错误2或123失败

movefile()错误2或123失败
EN

Stack Overflow用户
提问于 2014-11-02 14:52:12
回答 2查看 1.5K关注 0票数 0

我正在更新一个c++例程,以移动在2008/2010中编写的文件。我现在在运行VS Express 2012

显然,编译器会发生更改,因为字符串函数必须升级到strcpy_s等。这是一个控制台应用程序。我从未将我的C++知识(过去的C++知识扩展到C#等等),因为我只需要能够编写一些小的实用程序来在命令行上完成一些事情。不过,我仍然能够编写一些比较复杂的实用程序。

我的问题是movefile()函数总是因为错误2或123而无法移动。我在C:\users\alan\下载文件夹中工作,所以我知道我有权限。我知道文件在那里。代码的小片段是:

代码语言:javascript
复制
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

我所有的字符串都是简单的char字符串,即使在阅读之后,我也不确定LPCWSTR是什么类型def,这是否是罪魁祸首。因此,要使其编译,我只需对字符串进行类型化。它会编译。但它还是不会移动文件。

在开发源代码和最优变量方面,代码更加复杂,但我已经将其简化为一个简单的“在文件名后添加一个1”的情况,看看我是否可以简单地重命名它。我认为C:\xxx\yyy\zzz\test.txt在某些方面可能是错误的,但是这个想法在上面的测试中失败了。不管有没有.\,我都做过同样的事情。除了创建自己的文件打开读/写二进制函数来替换movefile()之外,我已经没有其他想法了。我真的反对,但如果必要的话,我会的。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-02 15:01:29

将参数传递给LPCWSTR这一事实表明,您正在用UNICODE定义的程序编译程序,这意味着您正在调用MoveFileW,编译器警告您的参数类型不匹配。

插入强制转换并不能解决这个问题。您正在告诉编译器停止抱怨,但实际上还没有解决问题(底层数据仍然是错误的)。

实际解决办法:

  1. 按照WCHAR的要求使用MoveFileW (或TCHAR/LPTSTR_T宏)。
  2. 显式调用MoveFileA
  3. 编译时没有定义UNICODE
票数 4
EN

Stack Overflow用户

发布于 2014-11-02 18:58:34

谢谢安德鲁·梅迪科。我使用了MoveFileA,这个程序现在看起来很好用。

我不确定是否关闭了unicode,但我确实更改了属性中的一个项。

我需要阅读有关unicode/ansi设置的编译器。但是现在这个问题已经解决了,我相信我已经知道我需要做什么了。“研究”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26700618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档