在Windows中實現文件的操作主要有兩種方法。一種是直接利用CFile 類的操作成員函數來實現,它要用到對於文件操作的底層操作方式,如READ、WRITE、GETLENTH等,並且要直接操作文件的屬性,如創建、讀、寫等;而且,其緩沖區的設置對於文件的大小和不同的計算機是不同的,特別是對於長度很大的數據庫進行備份,很難達到最佳效果。
另一種有效的方式是利用32外殼來實現這些對於文件的操作。它可以實現包括文件的拷貝、更名、移動及刪除等,並且可以支持通配符(如*和?),也可以直接對一個目錄或目錄樹進行操作。
本文分析了Win32外殼API對於文件操作的原理,並利用Visual C++6.0實現文件的拷貝操作。
一、 原理與結構
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作為間隔,並且可以支持通配符*和?。如源文件或目錄有兩個,則應是: