C 为什么具有相同源和目标的MoveFile会随机失败?
当我在Windows7系统上运行下面的简单C程序时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 <
#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
。