文件操作 IO NT SHFileOperation

Windows95/NT中提供了一個API函數SHFileOperation(),它只有一個指向SHFILEOPSTRUCT結構的參數。SHFileOperation()函數的原形如下:

---- WIN SHELL API int WINAPI SHFileOperation (LPSHFILEOPSTRUCT lpFIleOp);

---- LPSHFILEOPSTRUCT結構包含有進行文件操作的各種信息,其具體的結構如下:

    Typedef struct  _ShFILEOPSTRUCT {
     HWND hWnd;      //消息窗口
     UINT  wFunc;      //操作類型
     LPCSTR  pFrom;    //源文件及路徑
     LPCSTR  pTo;        //目標文件及路徑
     FILEOP_FLAGS  fFlags;  //操作與確認標誌
     BOOL  fAnyOperationsAborted; //操作選擇位
     LPVOID  hNameMappings;       //文件映射
     LPCSTR  lpszProgressTitle;   //進度窗口標題
} SHFILEOPSTRUCT, FAR* LPSHFILEOPSTRUCT;

---- 在這個結構中,有幾個成員很重要。hWnd是指向發送消息的窗口,pFrom與pTo是進行文件操作的源文件名和目標文件名,它包含文件的路徑,對於多個文件名之間用NULL作爲間隔,並且可以支持通配符*和?。如源文件或目錄有兩個,則應是:

char  pFrom[]="c://windows//command
/0c://dos//himem.sys/0"

---- 它表示對c:/windows/command目錄下的所有文件和c:/dos/himem.sys文件進行操作。'//'是C語言中的'/'的轉義符,'/0'則是NULL。wFunc 是結構中的重要成員,它指出將要進行的操作類型,是下面的操作類型之一:

---- FO_COPY: 拷貝文件pFrom到pTo 的指定位置。

---- FO_RENAME: 將pFrom的文件名更名爲pTo的文件名。

---- FO_MOVE: 將pFrom的文件移動到pTo的地方。

---- FO_DELETE: 刪除pFrom指定的文件。

---- 在進行文件拷貝、移動或刪除時,如果需要的時間很長,則會在進行的過程中出現一個無模式的對話框,可以顯示執行的進度和執行的時間,以及正拷貝移動或刪除的文件名,成員lpszProgressTitle顯示此對話框的標題。fFlags是在進行文件操作時的過程和狀態控制標識。它主要有如下一些標識,也可以是其組合。

---- FOF_FILESONLY:不執行通配符,只執行文件.

---- FOF_ALLOWUNDO:保存 UNDO信息,以便恢復.

---- FOF_NOCONFIRMATION: 在出現目標文件已存在的時候,如果不設置此項,則它會出現確認是否覆蓋的對話框,設置此項則自動確認,進行覆蓋,不出現對話框。

---- FOF_NOERRORUI: 設置此項後,當文件處理過程中出現錯誤時,不出現錯誤提示,否則會進行錯誤提示。

---- FOF_RENAMEONCOLLISION: 當已存在文件名時,對其進行更換文件名提示。

---- FOF_SILENT: 不顯示進度對話框。

---- FOF_WANTMAPPINGHANDLE: 要求SHFileOperation()函數返回正處於操作狀態的實際文件列表,文件列表名柄保存在hNameMappings成員中。SHFILEOPSTRUCT將包含一個SHNAMEMAPPING結構的數組,此數組保存由SHELL計算的每個處於操作狀態的文件的新舊路徑。


Demo:

 SHFILEOPSTRUCT FileOp = {0};
    FileOp.fFlags = FOF_NOCONFIRMATION; //不出現確認對話框;//FOF_ALLOWUNDO |   //允許放回回收站
    
    FileOp.pFrom = lpszPath;
    FileOp.pTo = NULL;      //一定要是NULL
    FileOp.wFunc = FO_DELETE;    //刪除操作
    return SHFileOperation(&FileOp);


轉自 http://blog.csdn.net/haiou327/article/details/5717163


發佈了32 篇原創文章 · 獲贊 9 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章