フォルダ(デスクトップ)内のすべてのファイルを別の場所に移動しようとしていますが、ファイルの半分だけが移動します。いくつかの奇妙な動作:フォルダ内のすべてのファイルを別の場所に移動
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);
}
この問題は、ディレクトリの反復処理中にディレクトリの状態を変更することによって発生することが予想されます。 'SHFileOperation'や' IFileOperation'を使う方がはるかに意味があります。しかし、あなたが単純にすべてのハードワークを自分でやっていると主張すれば、まずファイルのリストを作成してから移動してください。 –
おそらくファイルが動いていて、ファイルが存在しないのでハンドルhFindがうまくいかなかったのでしょうか?また、[shlwapi.lib](https://msdn.microsoft.com/en-us/library/windows/desktop/bb762164%28v=vs.85%29.aspx)の関数を使ってファイル? – PaulMcKenzie
私のコード@DavidHeffernanを更新しました。それはまだこのように動作していません。 – ewrwer34