一些奇怪的行为:将文件夹中的所有文件移动到另一个位置

时间:2016-05-19 14:56:25

标签: c++ winapi

我正在尝试将文件夹(桌面)中的所有文件移动到另一个文件夹,但只有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);
}

1 个答案:

答案 0 :(得分:2)

在Windows API中有关于使用FindFirstFile / FindNextFile循环关于更改循环中的目录的警告。制作一个列表,然后在另一个循环中移动文件。 [顺便删除是明确定义的工作,所以我们应该感到惊讶的举动不是。正如我们在下面看到的那样,这不是真正发生的事情。]

现在阅读了中级编辑,他陷入了一个有趣的错误。源目录是桌面。它将所有文件移到桌面上,并没有查看所有用户桌面,这是另一个目录。 (实际上,在原始问题中存在足够的信息来查看这一点,但还不足以看到他期望它适用于所有用户桌面。)这不会很好地工作,因为目标目录不存在于所有用户桌面上。虽然他可以创建它,但最终只有两个可见,并且将任意目录合并为文件夹视图是一个过于先进的主题。