首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MoveFileEx工作不正常吗?

MoveFileEx工作不正常吗?
EN

Stack Overflow用户
提问于 2012-03-08 21:24:39
回答 2查看 5.3K关注 0票数 2

我尝试过几种方法让MoveFileEx使用DELAY_UNTIL_REBOOT标志,但没有成功。注册表中的FileRenameOperations键还显示该方法没有正确执行。可能是什么原因?

我像这样调用我的MoveFileEx函数:

代码语言:javascript
复制
MoveFileEx(localFile, oldFile, MoveFileFlags.MOVEFILE_DELAY_UNTIL_REBOOT);

我的WINAPI代码如下:

代码语言:javascript
复制
[DllImport("kernel32.dll", EntryPoint = "MoveFileEx")]
internal static extern bool MoveFileEx(string lpExistingFileName, string lpNewFileName, MoveFileFlags dwFlags);

internal enum MoveFileFlags
{
    MOVEFILE_REPLACE_EXISTING = 1,
    MOVEFILE_COPY_ALLOWED = 2,
    MOVEFILE_DELAY_UNTIL_REBOOT = 4,
    MOVEFILE_WRITE_THROUGH = 8
}

此应用程序在管理帐户下运行。这是因为我使用的是4而不是0x4,还是64位的问题?谢谢!

编辑:操作返回错误代码为3。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-08 22:05:04

错误代码3是ERROR_PATH_NOT_FOUND。似乎您在文件名中犯了一个简单的错误:您的一个文件名中的一个目录不存在。

在注释中,您可以声明失败的调用的形式是:

代码语言:javascript
复制
MoveFileEx(newFile, "", 4);

这肯定会失败。您要做的是传递NULL作为目标文件名,以便删除该文件。但是您不是要传递NULL,而是传递空字符串。为了将NULL传递给本机API,请按如下方式调用它:

代码语言:javascript
复制
bool res = MoveFileEx(filename, null,
    MoveFileFlags.MOVEFILE_DELAY_UNTIL_REBOOT);

我将确保在您的pinvoke中包含SetLastError = true,以便您能够诊断错误。

代码语言:javascript
复制
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern bool MoveFileEx(string lpExistingFileName, 
    string lpNewFileName, MoveFileFlags dwFlags);
票数 5
EN

Stack Overflow用户

发布于 2015-07-21 13:58:39

您的过程应该具有管理权限。

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

https://stackoverflow.com/questions/9625153

复制
相关文章

相似问题

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