2013-03-06 59 views
3

我一直在努力得到這個權利現在幾個小時,它的作品完美在Windows Vista & Windows 7,但當我在Windows上運行它XP沒有任何消息失敗。不幸的是,我沒有XP下的開發環境,所以我不能通過調試器運行它來檢查,我錯過了一些非常明顯的事情嗎?同一段代碼實際上使用CopyFile和一些命令將數據寫出到C:\,所以如果它是一個權限錯誤,那很奇怪。移動文件夾Windows的C + +:工作Vista和以上,而不是XP

編輯:返回值是1223,ERROR_CANCELLED這意味着用戶取消。

編輯2:我禁用了s.fFlags,它立即彈出一個對話框詢問它是否應該創建dir-test文件夾,因此我切換到FOF_NOCONFIRMATION,它似乎忽略了該標誌。我也會在刪除過程中使用相同的SHFileOperation方法,因此它不適用於文件副本。

LPTSTR source = L"dir-test\\*\0";    
LPTSTR dest = L"C:\\dir-test\0"; 


SHFILEOPSTRUCT s = { 0 }; 
s.hwnd = 0; 
s.wFunc = FO_COPY; 
s.fFlags = FOF_SILENT; 
s.pTo = dest; 
s.pFrom = source; 
int n; 
n = SHFileOperation(&s);` 
+3

什麼是回報值? – lcs 2013-03-06 15:28:36

+1

爲什麼不使用['MoveFile'](http://msdn.microsoft.com/en-us/library/windows/desktop/aa365239(v = vs.85).aspx)? – 2013-03-06 15:30:50

+0

@millsj:無法告訴你,我沒有一個XP開發環境來調試它。 – 2013-03-06 15:32:57

回答

1

因此,出於某種奇怪的原因,使用SHFileOperation將迫使Windows XP(但不是Vista或7)的確認對話框,並忽略標誌以告訴它只是確認。在運行副本之前使用CreateDirectory()進行簡單修復,不需要確認對話框。

0

的文檔SHFILEOPSTRUCT有這樣的警告:

它不能被誇大了,你的路徑應該永遠是完整路徑。如果pFrom或pTo成員是非限定名稱,則當前目錄將取自由GetCurrentDirectory和SetCurrentDirectory函數管理的全局當前驅動器和目錄設置。

您的source規範是一個非限定名稱。

+0

的確如此,但我正在將應用程序執行的當前目錄中的文件移出,同時我可以要求Windows爲其提供完全合格的路徑,但實際上並不會造成問題。 – 2013-03-06 16:02:55

+1

@NicholasSmith ...你確定你沒有做過像打開一個文件對話框那樣可以改變當前目錄在一個操作系統,但不是另一個? http://stackoverflow.com/questions/930816/why-does-openfiledialog-change-my-working-directory – Roddy 2013-03-06 16:34:25

相關問題