2016-05-19 3 views
-2

フォルダ(デスクトップ)内のすべてのファイルを別の場所に移動しようとしていますが、ファイルの半分だけが移動します。いくつかの奇妙な動作:フォルダ内のすべてのファイルを別の場所に移動

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

この問題は、ディレクトリの反復処理中にディレクトリの状態を変更することによって発生することが予想されます。 'SHFileOperation'や' IFileOperation'を使う方がはるかに意味があります。しかし、あなたが単純にすべてのハードワークを自分でやっていると主張すれば、まずファイルのリストを作成してから移動してください。 –

+0

おそらくファイルが動いていて、ファイルが存在しないのでハンドルhFindがうまくいかなかったのでしょうか?また、[shlwapi.lib](https://msdn.microsoft.com/en-us/library/windows/desktop/bb762164%28v=vs.85%29.aspx)の関数を使ってファイル? – PaulMcKenzie

+0

私のコード@DavidHeffernanを更新しました。それはまだこのように動作していません。 – ewrwer34

答えて

2

ループ内でのディレクトリの変更についてFindFirstFile/FindNextFileループの使用についてのWindows APIでの警告があります: はここに私のコードです。リストを作成し、別のループでファイルを移動します。 [ちなみに削除は明示的に動作するように定義されているので、私たちは移動が驚かないといけません。そして、実際に起こっていることではありません。]

中間編集を読んだので、彼は面白い間違いに陥っています。ソースディレクトリはデスクトップです。彼はすべてのファイルをデスクトップ上に移動し、別のディレクトリであるすべてのユーザーのデスクトップを見ませんでした。 (実際、これを見るために元の質問には十分な情報がありますが、すべてのユーザーのデスクトップに適用することを期待しているとは思えません。)すべてのユーザーのデスクトップに存在します。彼はそれを作成することができましたが、これは2つが目に見えるようになり、フォルダビューとして任意のディレクトリをマージすることはあまりにも高度なトピックです。

+0

まだ動作しません。コードを更新しました。 – ewrwer34

+0

私たちを身代金にして、わからないコードのデバッグを強制しないでください。私たちはあなたのコードに何が間違っているかを教えてくれます。以上です。その後、コードをステップアップして修正する必要があります。助けの吸血鬼にならないでください。 –

+0

どういう意味ですか?コードを更新しましたか?見えない?ステップアップとデバッグ???それは正常にコンパイルされています。ちょうど奇妙な動作を示しています。私はここでIMがなぜ私がデバッグしようと思っていないと思っていないのですか?あなたの問題は何ですか私はこれがこのウェブサイトのためのものだと思った。 – ewrwer34

関連する問題