1. 文件API
1.1. 打開關閉文件
CreateFile
HANDLE CreateFile(
LPCTSTR lpFileName, //指向文件名的指針
DWORD dwDesiredAccess, //訪問模式(寫/讀)
DWORD dwShareMode, //共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全屬性的指針
DWORD dwCreationDisposition, //如何創建
DWORD dwFlagsAndAttributes, //文件屬性
HANDLE hTemplateFile //用于輔助文件句柄
);
如果函數成功,返回一個打開的指定文件的句柄
CloseHandle
1.2. 文件的讀寫
ReadFile
BOOL ReadFile(
HANDLE hFile, //要讀取的文件的句柄,必須為打開的
LPVOID lpBuffer, //接收文件數據的緩沖區指針
DWORD nNumberOfBytesToRead, //文件中要讀取數據的大小
LPDWORD lpNumberOfBytesRead, //從文件中讀出的數據大小
LPOVERLAPPED lpOverlapped //指向OVERLAPPED結構的指針
);
如果函數正確執行,則返回TRUE,否則返回FALSE
WriteFile
BOOL WriteFile(
HANDLE hFile, //要寫入的文件句柄,必須為打開的
LPCVOID lpBuffer, //指向要寫入的數據的緩沖區大小
DWORD nNumberOfBytesToWrite, //要寫入的字節數
LPDWORD lpNumberOfBytesWritten, //返回實際寫入文件的字節數
LPOVERLAPPED lpOverlapped //指向OVERLAOOED結構的指針
);
如果函數正確執行,則返回TRUE,否則返回FALSE
1.3. 獲取文件大小
GetFileSize
DWORD GetFileSize(
HANDLE hFile, //訪問的文件句柄,已打開
LPDWORD lpFileSizeHigh //高字節地址
);
如果函數執行成功,函數返回文件大小的低32位的值,而如果文件很大,則參數lpFileSiezHigh返回高32位的值。如果函數執行失敗,返回0xFFFFFFFF。
1.4. 文件的查找與遍歷
FindFirstFile
HANDLE FindFirstFile(
LPCTSTR lpFileName, //表示文件名的字符串
LPWIN32_FIND_DATA lpFindFileData //指向WIN32_FIND_DATA結構的指針
//存儲所查找的文件的屬性
);
函數執行成功,返回一個有效的文件查找句柄,并且填充WIN32_FIND_DATA結構
WIN32_FIND_DATA
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; //文件的屬性
FILETIME ftCreationTime; //文件創建時間
FILETIME ftLastAccessTime; //最后訪問時間
FILETIME ftLastWriteTime; //最后修改時間
DWORD nFileSizeHigh;
DWORD nFileSizeLow; //大小
DWORD dwOID;
TCHAR cFileName[MAX_PATH]; //文件名稱
} WIN32_FIND_DATA;
FindNextFile
根據有效的文件查找句柄調用FindNextFile()函數進行下一個文件的查找。
BOOL FindNextFile(
HANDLE hFindFile, //為有效的文件查找句柄,如果函數執行 //成功,會被賦予下一個文件的查找句柄
LPWIN32_FIND_DATA lpFindFileData //同上
);
如果文件查找操作完成,需要調用函數FindClose()關閉文件查找句柄。
1.5. 打開文件夾
SHBrowseForFolder

/**//**
* @brief 選擇打開的文件夾
* @param pchPath 返回選擇的文件夾路徑
* @remark 調用SHBrowseForFolder函數
* @return 返回true表示執行成功
*/
bool KFile::GetFolder(TCHAR* pchPath)


{
if (NULL == pchPath)

{
assert(0);
return false;
}

BROWSEINFO bi;
ZeroMemory(&bi, sizeof(BROWSEINFO));
LPMALLOC pMalloc;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if (pidl != NULL)

{
//從LPITEMIDLIST取出路徑
SHGetPathFromIDList(pidl, pchPath);
if (SUCCEEDED(SHGetMalloc(&pMalloc)))

{
pMalloc->Free(pidl);
pMalloc->Release();
}
return true;
}
return false;
}
1.6. 打開文件與保持文件
GetOpenFileName

/**//**
* @brief 選擇打開的文件
* @param hWnd 所屬窗口句柄
* @param pchPath 返回選擇的文件路徑
* @remark 調用GetOpenFileName函數
* @return 返回true表示執行成功
*/
bool KFile::GetOpenFile(HANDLE hWnd, TCHAR* pchPath)


{
if (NULL == pchPath)

{
assert(0);
return false;
}

OPENFILENAME Ofn;
pchPath[0] = L'\0';
ZeroMemory(&Ofn, sizeof(Ofn));
Ofn.lStructSize = sizeof(OPENFILENAME);
Ofn.hwndOwner = m_hWnd; //所有者對話框窗口的句柄
Ofn.lpstrFilter = SUFFIX_NAME;
Ofn.lpstrFile= pchPath;
Ofn.lpstrFileTitle = NULL;
Ofn.lpstrInitialDir = NULL;
Ofn.nMaxFile = MAX_PATH;
Ofn.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT;
return GetOpenFileName(&Ofn);
}

OPENFILENAME 結構體細看http://baike.baidu.com/view/2175167.htm
GetSaveFileName
類似GetOpenFileName
posted on 2009-07-28 17:44
longshen 閱讀(704)
評論(0) 編輯 收藏 引用 所屬分類:
VC++