Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么具有相同源和目标的MoveFile会随机失败?_C_Winapi_File Rename - Fatal编程技术网

C 为什么具有相同源和目标的MoveFile会随机失败?

C 为什么具有相同源和目标的MoveFile会随机失败?,c,winapi,file-rename,C,Winapi,File Rename,当我在Windows7系统上运行下面的简单C程序时 #include <stdio.h> #include <windows.h> int main() { int i; CreateDirectory("testdir", NULL); CreateDirectory("testdir\\foo", NULL); CreateDirectory("testdir\\bar", NULL); for (i = 0; i <

当我在Windows7系统上运行下面的简单C程序时

#include <stdio.h>
#include <windows.h>

int main() {
    int i;

    CreateDirectory("testdir", NULL);
    CreateDirectory("testdir\\foo", NULL);
    CreateDirectory("testdir\\bar", NULL);

    for (i = 0; i < 10000; i++) {
        BOOL result;

        result = MoveFile("testdir\\bar", "testdir\\foo\\bar");
        if (!result) {
            fprintf(stderr, "rename bar => foo/bar: %d\n", GetLastError());
            return 1;
        }

        result = MoveFile("testdir\\foo", "testdir\\foo");
        if (!result) {
            fprintf(stderr, "rename foo => foo: %d\n", GetLastError());
            fprintf(stderr, "after %d iterations\n", i);
            return 1;
        }

        result = MoveFile("testdir\\foo\\bar", "testdir\\bar");
        if (!result) {
            fprintf(stderr, "rename foo/bar => bar: %d\n", GetLastError());
            return 1;
        }
    }

    return 0;
}

为什么会这样?

我发现是Windows搜索服务导致了错误。解决方案是通过“控制面板”中的索引选项排除文件夹。

可能是您的AV软件。不过,避免这种情况很容易。尝试将A移动到A没有意义。只是猜测:可能最终您调用了
MoveFile()
,而上次调用
MoveFile()
(可能需要很短的时间才能重新准备好)时,该文件仍处于锁定状态(可能需要很短的时间)?随机的“正在使用”错误通常是由写得不好的*AV软件(*所有这些软件)引起的@JonathanPotter该问题已导致我的应用程序无法启动,导致我的应用程序无法启动。请尝试通过循环访问和处理MoveFile的错误来实现超时。另外,如果仅在重命名后才使用
stdio
中的
rename