2012-02-08 34 views
2

我試圖複製一個目錄到一個新的位置。所以我使用SHFileOperation/SHFILEOPSTRUCT如下:SHFileOperation/SHFILEOPSTRUCT

SHFILEOPSTRUCT sf; 
memset(&sf,0,sizeof(sf)); 
sf.hwnd = 0; 
sf.wFunc = FO_COPY; 
dirName += "\\*.*"; 
sf.pFrom = dirName.c_str(); 
string copyDir = homeDir + "\\CopyDir"; 
sf.pTo = copyDir.c_str(); 
sf.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI; 

int n = SHFileOperation(&sf); 
if(n != 0) 
{ 
    int x = 0; 
} 

所以我設置爲上述值。我在文件夾中創建了一個文件(我已經關閉了句柄,因此它應該可以移動)。 SHFileOperation調用返回2,但我無法找到解釋這些錯誤代碼的地方。有沒有人知道我在哪裏可以找到2意味着什麼,或者有沒有人有任何想法,爲什麼它可能不工作?乾杯

回答

7

錯誤代碼2表示系統找不到指定的文件。

錯誤描述的完整列表,請參閱Windows System Error Codes,或寫,將獲得錯誤代碼的說明功能:

std::string error_to_string(const DWORD a_error_code) 
{ 
    // Get the last windows error message. 
    char msg_buf[1025] = { 0 }; 

    // Get the error message for our os code. 
    if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 
         0, 
         a_error_code, 
         0, 
         msg_buf, 
         sizeof(msg_buf) - 1, 
         0)) 
    { 
     // Remove trailing newline character. 
     char* nl_ptr = 0; 
     if (0 != (nl_ptr = strchr(msg_buf, '\n'))) 
     { 
      *nl_ptr = '\0'; 
     } 
     if (0 != (nl_ptr = strchr(msg_buf, '\r'))) 
     { 
      *nl_ptr = '\0'; 
     } 

     return std::string(msg_buf); 
    } 

    return std::string("Failed to get error message"); 
} 

從閱讀pTopFrom指定SHFileOperation字符串的文件必須是雙空終止:你的只有單空終止。請嘗試以下操作:

dirName.append(1, '\0'); 
sf.pFrom = dirName.c_str(); 
string copyDir = homeDir + "\\CopyDir"; 
copyDir.append(1, '\0'); 
sf.pTo = copyDir.c_str(); 
+0

雙空終止。所以我在每個結尾添加一個\ 0? – discodowney 2012-02-08 10:42:39

+0

基本上,是的。 – hmjd 2012-02-08 10:55:07

+0

它沒有任何區別。我仍然從SHFileOperation得到2。這兩個文件夾都存在,並且pFrom文件夾中有一個文件,所以我不知道它無法找到哪個文件。 – discodowney 2012-02-08 10:58:24

0

SHFileOperation函數已被IFileOperation在Windows Vista中替換。那麼使用SHFileOperation很聰明嗎?或者代碼只能在<遠景中運行。

編輯: 刪除了部分內容,我誤解了您的部分內容。

+0

是的香港專業教育學院使用的CopyFile但我想移動某個目錄的所有文件,我知道SHFileOperation可以做到這一點只是上面的代碼(或者,你知道,代碼的工作版本以上)。我不知道IFileOperation。我好奇,但。如果im在Windows資源管理器中,我選擇使用鍵盤/鼠標將文件夾複製到其他地方,是否使用此IFileOperation或SHFileOperation? – discodowney 2012-02-08 10:33:48