0

ディレクトリを新しい場所、特にで作成した場所に移動する際に問題が発生しCreateDirectoryます。コードは次のとおりです。

if (FALSE == CreateDirectory(strDestination, NULL))
{
    dwError = GetLastError();
    if (ERROR_ALREADY_EXISTS != dwError)
    {
        strError.Format("Error creating %s: %i", strDestination, dwError);
        LogIt(strError);
    }
}
if (FALSE == MoveFile(strSource, strDestination + strID))
{
    dwError = GetLastError();
    strError.Format("Error moving %s to %s: %i", strSource, strDestination + strID, dwError);
    LogIt(strError);
}

ただし、手動でディレクトリを作成すると、そのパスをこのコードにフィードでき、機能します。これら2つのディレクトリのセキュリティ設定を比較し、それらが同じであることを確認しましたが、それでも機能しません。作成コードで何か問題がありますか?2番目のパラメータをそのままにしてNULLおくと、ディレクトリを手動で作成した場合と同じ権限が付与されますか?

4

1 に答える 1

4

マシンでウイルス対策を実行している場合、新しいフォルダーを検証/クリーン キャッシュに追加している間、新しいフォルダーがロックされている可能性があります。たとえば、AV ドライバーが他のアクティビティで動かなくなった場合、断続的なタイミングの問題が発生する可能性があります。

これが起こっていることを確認するには、AV のオンアクセス スキャナーを無効にすることができます。コードでの回避策は、わずかな遅延を挟んで 2 ~ 3 回再試行 (たとえば) することです。

編集:OPは別のボリュームへの移動に失敗していることを確認したため、答えは MOVEFILE_COPY_ALLOWED フラグを指定して MoveFileEx() を使用することです。

于 2012-11-12T22:41:09.547 に答える