在WIN95中實現檔案複製的程式設計方法 (轉)
在WIN95中實現複製的方法
湖北工學院圖書館室
張明武
---- 在中實現檔案的操作主要有兩種方法。一種是直接利用CFile 類的操作成員來實現,它要用到對於檔案操作的底層操作方式,如READ、WRITE、GETLENTH等,並且要直接操作檔案的屬性,如建立、讀、寫等;而且,其緩衝區的設定對於檔案的大小和不同的計算機是不同的,特別是對於長度很大的進行,很難達到最佳效果。
---- 另一種有效的方式是利用外殼來實現這些對於檔案的操作。它可以實現包括檔案的複製、更名、移動及刪除等,並且可以支援萬用字元(如*和?),也可以直接對一個目錄或目錄樹進行操作。
---- 本文分析了Win32外殼對於檔案操作的原理,並利用Visual C++6.0實現檔案的複製操作。
---- 一、 原理與結構
---- Windows95/NT中提供了一個API函式SHFileOperation(),它只有一個指向SHFILEOPSTRUCT結構的引數。SHFileOperation()函式的原形如下:
---- WIN API int WINAPI SHFileOperation (LPSHFILEOPSTRUCT lpFIleOp);
---- LPSHFILEOPSTRUCT結構包含有進行檔案操作的各種資訊,其具體的結構如下:
Typedef struct _ShFILEOPSTRUCT { HWND hWnd; //訊息視窗 UINT wFunc; //操作型別 LPCSTR pFrom; //原始檔及路徑 LPCSTR pTo; //目標檔案及路徑 FILEOP_FLAGS fFlags; //操作與確認標誌 BOOL fAnyOperationsAborted; //操作選擇位 LPVOID hNameMaps; //檔案對映 LPCSTR lpszProgressTitle; //進度視窗標題 } SHFILEOPSTRUCT, FAR* LPSHFILEOPSTRUCT;
---- 在這個結構中,有幾個成員很重要。hWnd是指向傳送訊息的視窗,pFrom與pTo是進行檔案操作的原始檔名和目標檔名,它包含檔案的路徑,對於多個檔名之間用NULL作為間隔,並且可以支援萬用字元*和?。如原始檔或目錄有兩個,則應是:
char pFrom[]="c:windowscommand c:doshimem.sys"
---- 它表示對c:windowscommand目錄下的所有檔案和c:doshimem.sys檔案進行操作。'是C語言中的'的轉義符,'則是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計算的每個處於操作狀態的檔案的新舊路徑。
---- 二、 例項操作
---- 本文就一個Visual C++來實現檔案複製的例項。首先建立一個單文件介面filecopy,然後在主中新增一個工具條變數m_wndMyToolBar,新建一個工具條IDR_MYTOOLBAR,設定一個工具訊息ID_FILECOPY,並在主框架MainFrm.cpp的OnCreate()成員函式中加入工具欄。
if(!m_wndMyToolBar.Create(this)|| !m_wndMyToolBar.LoadToolBar(IDR_MYTOOLBAR)) { TRACE("can not create the FileToolBar!n"); return -1; }
---- 透過中視類操作工具條IDR_MYTOOL,利用ClassWizard為其訊息ID_FILECOPY新增訊息處理函式OnFilecopy。然後在處理函式中加入下面程式。
void OnFilecopy() { int nOk; char strSrc[]="c:dosc:pcommand"; //可以改變源路徑 char strDst[]="c:temp"; //設定目的路徑 char strTitle[]="File copying"; //進度題頭 SHFILEOPSTRUCT FileOp; FileOp.hwnd=m_hWnd; FileOp.wFunc=FO_COPY; //執行檔案複製 FileOp.pFrom=strSrc; FileOp.pTo=strDst; FileOp.fFlags=FOF_ALLOWUNDO; FileOp.hNameMappings=NULL; FileOp.lpszProgressTitle=strTitle; nOk=SHFileOperation(&FileOp); if(nOk) TRACE("There is an error: %dn",nOk); else TRACE("SHFileOperation finished succesullyn"); if(FileOp.fAnyOperationsAborted) TRACE("Operation was aborted!n"); }
---- 三、 結束語
---- 利用Windows API進行程式檔案操作設計,它直接Windows操作中的外殼,它的處理過程與Windows95/98/NT中的處理過程是一致的有利於我們在系統中保持與的一致性;同時,由於在檔案處理中它是直接呼叫Windows API函式,因此不需要其它應用程式動態連結庫DLL的支援。
---- 在各種開發中,都提供了對於檔案的各種操作方式,但是它必須利用到檔案系統較為深入的知識,而且對於其操作的直觀性方面也需要開發者進一步地設計,因此利用作業系統SHELL進行程式設計,不失是一種好的設計方法。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988898/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 怎樣在PB中實現檔案的複製與刪除 (轉)
- linux中實現檔案的複製(c程式碼實現)LinuxC程式
- 在Oracle中實現資料庫的複製(轉)Oracle資料庫
- python多程式實現檔案海量複製Python
- Java中實現複製檔案或資料夾Java
- MFC檔案複製的函式程式程式碼 (轉)函式
- 檔案複製(Go語言實現)Go
- Java實現檔案複製的四種方式Java
- 針對Excel表格檔案操作的程式設計實現 (轉)Excel程式設計
- 在Oracle中實現資料庫的複製Oracle資料庫
- Java: 複製檔案最快方法Java
- 怎樣在遊戲設計製作中實現指令碼控制(轉)遊戲設計指令碼
- unix下複製檔案(轉)
- 關於檔案複製的程式程式碼(C++Builder) (轉)C++UI
- 如何批量複製多個檔案到多個目錄中(批量複製檔案,多對多檔案高效操作的方法)
- 在vSphere中實現複製貼上功能
- UNIX下去除檔案中重複資料的方法(轉)
- Windows 7 複製檔案慢的解決方法Windows
- 在ASP.NET中實現多檔案上傳 (轉)ASP.NET
- Playwright使用Typescript實現在測試case檔案中呼叫另一個檔案中的方法TypeScript
- Python中4種方法實現 xls 檔案轉 xlsxPython
- delphi多執行緒檔案複製怎麼實現執行緒
- nc複製檔案
- 複製檔案githubGithub
- Python中Wxpython實現剪下、複製、貼上和檔案開啟功能Python
- C語言實現檔案複製功能(包括文字檔案和二進位制檔案)C語言
- 在VB中實現任意檔案的16進位制方式察看 (轉)
- vue 中實現複製貼上Vue
- 如何實現檔案共享,檔案共享的設定方法-鐳速
- java中兩個物件間的屬性值複製,比較,轉為map方法實現Java物件
- 在WINDOWS下使用xcopy遠端複製檔案Windows
- Linux 中複製和移動檔案Linux
- 從ASM磁碟中複製檔案到本地檔案系統ASM
- 實現檔案拖放的一種簡潔方法 (轉)
- java 位元組流檔案複製方法總結Java
- win10 dos命令怎麼複製檔案_win10 dos命令複製檔案操作方法Win10
- 程式設計方式實現MySQL批量匯入sql檔案程式設計MySql
- 在Java中實現遠端方法呼叫(轉)Java