2012-11-12 26 views
0

我有移動目錄到一個新的位置的問題,特別是一個我CreateDirectory創建目錄移動。下面是代碼:C++ MoveFile給ERROR_ACCESS_DENIED不一致的Windows Server

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); 
} 

但是,如果我手動創建一個目錄,我可以這條道路送入該代碼和它的作品。我已經比較了這兩個目錄的安全設置,並確保它們是相同的,但仍然不起作用。有沒有我做錯了我的創作代碼?如果我將第二個參數保留爲NULL,它不應該授予我手動創建目錄時的相同權限嗎?

+0

它們都是'CString'類型。 –

+2

在您的成功案例和您的失敗​​案例中,源和目標位於同一驅動器上嗎? –

+0

啊哈,很好。源代碼在'C:'上。成功是在同一個驅動器上,但失敗在'E:'上。我在'E:'手動創建的目錄中嘗試了它,並且以相同的方式失敗。我不知道文件不能跨驅動器移動。 –

回答

4

如果你的機器上運行防病毒軟件,它可以鎖定新的文件夾,同時也驗證了它/它添加到其清潔緩存。這可能會導致間歇性的時間問題,例如,如果AV驅動程序陷入其他活動。

要檢查,這是發生了什麼事,你可以禁用AV的訪問掃描程序。在你的代碼中的解決方法是重試(說)2-3次,之間有一個小的延遲。

編輯:由於OP已確認它的失敗移動到不同的卷,答案是使用MoveFileEx()與MOVEFILE_COPY_ALLOWED標誌。