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 阅读(694)
评论(0) 编辑 收藏 引用 所属分类:
VC++