繁体   English   中英

movefile()失败,错误2或123

[英]movefile() fails error 2 or 123

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

显然,编译器有所更改,因为必须将字符串函数升级到strcpy_s等。没问题。 这是一个控制台应用程序。 我从未将C ++的知识从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

我所有的字符串都是简单的char字符串,即使在阅读后,我也不完全确定LPCWSTR是为类型定义的,这是否是罪魁祸首。 因此,要对此进行编译,我只需键入字符串即可。 并编译。 但是它仍然不会移动文件。
在开发source和dest变量时,代码更加复杂,但是我将其简化为简单的“仅在文件名后附加1”,以查看是否可以简单地重命名。 我以为C:\\ xxx \\ yyy \\ zzz \\ test.txt在某种程度上可能是错误的,但是上面的测试使这个想法落空了。 无论是否出现。\\相同问题,我都已完成。 除了使自己的fileopen读/写二进制函数替换movefile()之外,我已经没有其他想法了。 我真的反对,但是如果我必须的话。

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

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

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

实际解决方案:

  1. MoveFileW期望的那样使用WCHAR (或TCHAR / LPTSTR_T宏)。
  2. 明确调用MoveFileA
  3. 编译时未定义UNICODE

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

我需要在编译器上阅读有关unicode / ansi设置的信息。 但目前问题已解决,我确定我已经知道需要做什么。 “研究”!!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM