gpt4 book ai didi

c++ - movefile() 失败错误 2 或 123

转载 作者:太空宇宙 更新时间:2023-11-04 16:12:39 35 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

插入类型转换并不能解决这个问题。你是在告诉编译器停止提示,但你实际上并没有解决问题(底层数据仍然是错误的)。

实际解决方案:

  1. 使用 WCHAR 作为 MoveFileW 期望(或 TCHAR/LPTSTR_T 宏)。
  2. 显式调用MoveFileA
  3. 在未定义 UNICODE 的情况下编译。

关于c++ - movefile() 失败错误 2 或 123,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26700618/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com