我正在尝试将文件夹(桌面)中的所有文件移动到另一个文件夹,但只有HALF文件最终被移动,怎么办? 这是我的代码:
WCHAR DesktopPath[MAX_PATH];
pExpandEnvironmentStringsW(L"%userprofile%\\Desktop\\", DesktopPath, MAX_PATH);
WCHAR DesktopFiles[MAX_PATH];
lstrcpyW(DesktopFiles, DesktopPath);
lstrcatW(DesktopFiles, L"DesktopFiles\\");
CreateDirectory(DesktopFiles, NULL);
WCHAR search_path[200];
wsprintf(search_path, L"%s/*.*", DesktopPath);
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(search_path, &fd);
if (hFind != INVALID_HANDLE_VALUE)
{
do {
WCHAR filepath[MAX_PATH];
lstrcpyW(filepath, DesktopPath);
lstrcatW(filepath, fd.cFileName);
WCHAR newpath[MAX_PATH];
lstrcpyW(newpath, DesktopFiles);
lstrcatW(newpath, fd.cFileName);
MoveFile(filepath, newpath);
} while (::FindNextFile(hFind, &fd));
::FindClose(hFind);
}
答案 0 :(得分:2)
在Windows API中有关于使用FindFirstFile / FindNextFile循环关于更改循环中的目录的警告。制作一个列表,然后在另一个循环中移动文件。 [顺便删除是明确定义的工作,所以我们应该感到惊讶的举动不是。正如我们在下面看到的那样,这不是真正发生的事情。]
现在阅读了中级编辑,他陷入了一个有趣的错误。源目录是桌面。它将所有文件移到桌面上,并没有查看所有用户桌面,这是另一个目录。 (实际上,在原始问题中存在足够的信息来查看这一点,但还不足以看到他期望它适用于所有用户桌面。)这不会很好地工作,因为目标目录不存在于所有用户桌面上。虽然他可以创建它,但最终只有两个可见,并且将任意目录合并为文件夹视图是一个过于先进的主题。