請問有誰使用過SHFILEOPSTRUCTW(支援Unicode的版本)? |
答題得分者是:RedSnow
|
look4help
一般會員 發表:9 回覆:8 積分:3 註冊:2005-07-26 發送簡訊給我 |
各位好,我在站上看到一些使用SHFILEOPSTRUCT來進行檔案複製或刪除的案例。
我想使用它來將不要的檔案送進資源回收筒。
我使用支援Unicode的版本,不過卻發生無法刪除檔案的錯誤訊息。 我看站上的文章都是使用AnsiString的版本,我的程式碼如果改為AnsiString基本上是ok的,但是一但改為WideString就會出現無法刪除,請高手指點一下,是哪邊有問題呢?謝謝大家。
(我的作業系統為Window2000)
bool __fastcall TForm1::SendToRecycleBin(WideString deleteDir) { SHFILEOPSTRUCTW SHF; ZeroMemory(&SHF, sizeof(SHF)); SHF.hwnd = Handle; SHF.wFunc = FO_DELETE; SHF.pFrom = (wchar_t*)deleteDir; SHF.pTo = NULL; SHF.fFlags = FOF_ALLOWUNDO; SHFileOperationW(&SHF); } void __fastcall TForm1::Button1Click(TObject *Sender) { WideString fpath = "D:\\暫存區\\SSSS\0"; //-->因為之前範例都說要加上/0。 SendToRecycleBin(fpath); } |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
look4help 您好: 依據 Help 對於 SHFILEOPSTRUCT 結構中的 pFrom 與 pTo 兩個參數的描述來看:
|
look4help
一般會員 發表:9 回覆:8 積分:3 註冊:2005-07-26 發送簡訊給我 |
謝謝RedSnow。已經解決了。我把code貼出來給大家參考。
bool __fastcall TForm1::SendToRecycleBin(WideString deleteDir) { SHFILEOPSTRUCTW SHF; wchar_t delPath[MAX_PATH] = {'\0'}; wcscpy(delPath, (wchar_t*)deleteDir); ZeroMemory(&SHF, sizeof(SHF)); SHF.hwnd = Handle; SHF.wFunc = FO_DELETE; SHF.pFrom = delPath; SHF.pTo = NULL; SHF.fFlags = FOF_ALLOWUNDO; SHFileOperationW(&SHF); } void __fastcall TForm1::Button1Click(TObject *Sender) { WideString fpath = "D:\\暫存區\\SSSS"; SendToRecycleBin(fpath); }順帶一提的是,不知道宣告MAX_PATH會不會不夠,有沒有什麼 一勞永逸的辦法可以應付萬一有很長很長的路徑名稱? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |