整理: 文件操作
来源:互联网 发布:卡密社区外包系统源码 编辑:程序博客网 时间:2024/05/16 06:00
<2011_0809_2059>
验证 SetFileAttributes 在文件打开过程中执行的效果
/** * @file testFile.cpp* @brief 验证文件打开过程中, SetFileAttributes的执行效果*/#include "stdafx.h"#include <windows.h>int _tmain(int argc, _TCHAR* argv[]){INT iRc = S_OK;BYTE ucBuf[MAX_PATH];DWORD dwReadBytes = 0;HANDLE hFile = INVALID_HANDLE_VALUE;CONST TCHAR * pcPathName = _T("c:\\test.txt");_tprintf(_T("object file is [%s]\n"), pcPathName);ZeroMemory(ucBuf, MAX_PATH);hFile = CreateFile(pcPathName, // file name GENERIC_READ, // open for reading 0, // do not share NULL, // default security OPEN_EXISTING, // existing file only FILE_ATTRIBUTE_NORMAL, // normal file NULL); // no template if ((NULL == hFile)||(INVALID_HANDLE_VALUE == hFile)){ _tprintf(_T("CreateFile error\n"));iRc = S_FALSE;goto END;}if(!ReadFile(hFile, ucBuf, sizeof(ucBuf), &dwReadBytes, NULL)){_tprintf(_T("ReadFile error\n"));iRc = S_FALSE;goto END;}/** 模拟错误操作, * 看实验结果, SetFileAttributes在文件打开过程中, 也能正常执行, 不会报错* 在程序执行之前, 把pcPathName指向的文件设成"只读, 隐藏", * 程序执行之后, pcPathName指向的文件属性没有了"只读, 隐藏"*/try{SetFileAttributes(pcPathName, FILE_ATTRIBUTE_NORMAL);}catch(...){_tprintf(_T("SetFileAttributes error\n"));iRc = S_FALSE;goto END;}END:if(INVALID_HANDLE_VALUE != hFile){CloseHandle(hFile);hFile = INVALID_HANDLE_VALUE;}if(S_OK != iRc){_tprintf(_T("error happen\n"));}_tprintf(_T("END\n"));getchar();return 0;}
切分文件全路径
BOOL SplitFilePathName( const WCHAR * pcPathName, std::wstring & strDriver, std::wstring & strDir, std::wstring & strFileNamePrefix, std::wstring & strFileNamePostfix) { WCHAR szPathName[MAX_PATH] = L"\0"; WCHAR szDriver[MAX_PATH] = L"\0"; /// 这个缓冲区要整大点, 要不执行结果不对. WCHAR szDir[MAX_PATH] = L"\0"; WCHAR szFileNamePrefix[MAX_PATH] = L"\0"; WCHAR szFileNamePostfix[MAX_PATH] = L"\0"; if (NULL == pcPathName) return FALSE; _tcscpy(szPathName, pcPathName); // _splitpath 的反函数_makepath _tsplitpath(szPathName, szDriver, szDir, szFileNamePrefix, szFileNamePostfix); strDriver = szDriver; strDir = szDir; strFileNamePrefix = szFileNamePrefix; strFileNamePostfix = szFileNamePostfix; /** note * csPathName = c:\subDir1\subDir2\subDir3\test1.dat * csDriver = c: * csDir = \subDir1\subDir2\subDir3\ * csFileNamePrefix = test1 * csFileNamePostfix = .dat */ return TRUE; }
<2014_0817>
建立一个指定size的空文件
BOOL CreateFileBySize(const WCHAR * pcFilePathName, LONGLONG llFileSize) { BOOL bRc = FALSE; LARGE_INTEGER LintSizeIn; LARGE_INTEGER LintSizeOut; HANDLEhfile = INVALID_HANDLE_VALUE; if (NULL == pcFilePathName) return FALSE; LintSizeIn.QuadPart = llFileSize; LintSizeOut.QuadPart = 0; hfile = CreateFile(pcFilePathName, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hfile) return FALSE; bRc = ::SetFilePointerEx(hfile, LintSizeIn, &LintSizeOut, FILE_BEGIN); _ASSERT(bRc); if (bRc) { bRc = ::SetEndOfFile(hfile); _ASSERT(bRc); } SAFE_CLOSE_HANDLE(hfile); return bRc; }
附加一个文件到另外一个文件
BOOL AppendFile2File(const WCHAR * pcFileDst, const WCHAR * pcFileSrc, BOOL bCreateNewDst) { BOOL bRc = FALSE; LONGLONG llFileSizeDst = 0; HANDLE hfileDst = INVALID_HANDLE_VALUE; HANDLE hfileSrc = INVALID_HANDLE_VALUE; LARGE_INTEGER LintPos; UCHAR* pBuf = NULL; DWORD dwBufRdBk = 0; DWORD dwBufWrBk = 0; const DWORD dwBufSize = (long)1 * 1024 * 1024; ///< 1MB LintPos.QuadPart = 0; if (bCreateNewDst) { if (!CreateEmptyFile(pcFileDst)) return FALSE; } if (!ns_base::IsFileExist(pcFileDst) || !ns_base::IsFileExist(pcFileSrc)) { return FALSE; } /// open file dst llFileSizeDst = ns_base::GetFileSize(pcFileDst); hfileDst = CreateFile(pcFileDst, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hfileDst) { goto END_AppendFile2File; } if (llFileSizeDst > 0) { if (!SetFilePointerEx(hfileDst, LintPos, NULL, FILE_END)) goto END_AppendFile2File; } /// open file src hfileSrc = CreateFile(pcFileSrc, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hfileSrc) { goto END_AppendFile2File; } pBuf = new UCHAR[dwBufSize]; do { if (!::ReadFile(hfileSrc, pBuf, dwBufSize, &dwBufRdBk, NULL)) goto END_AppendFile2File; if (!::WriteFile(hfileDst, pBuf, dwBufRdBk, &dwBufWrBk, NULL)) goto END_AppendFile2File; if (dwBufWrBk != dwBufRdBk) goto END_AppendFile2File; } while (dwBufRdBk > 0); bRc = TRUE;END_AppendFile2File: SAFE_CLOSE_HANDLE(hfileDst); SAFE_CLOSE_HANDLE(hfileSrc); SAFE_DELETE_ARRAY(pBuf); return bRc; }
BOOL CreateEmptyFile(const WCHAR * pcFilePathName) { HANDLEhfile = INVALID_HANDLE_VALUE; if (NULL == pcFilePathName) return FALSE; hfile = CreateFile(pcFilePathName, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hfile) return FALSE; SAFE_CLOSE_HANDLE(hfile); return TRUE; }
- Symbian文件操作整理
- 文件、日期操作整理
- Symbian文件操作整理
- 整理: 文件操作
- 文件操作—整理
- c#操作excel文件整理
- MFC文件、文件夹操作整理
- python 文件操作API整理
- 文件读写的操作整理
- python文件操作整理汇总
- dom4j操作xml文件整理
- python文件/目录操作整理
- MFC文件操作笔记整理
- Android文件相关操作整理
- python文件操作 API整理
- 整理javascript操作文件说明:读写文件
- java文件整理(四)--jar文件操作
- VC++ MFC文件,文件夹操作整理
- 嘿
- DOS命令大全
- 华为软件编程规范和范例(转载)
- poj1477
- sql loader的用法
- 整理: 文件操作
- 《肖申克的救赎》是否也拯救了你
- sicily 1419
- 《经济学基础》笔记
- VC++下CListCtrl使用详解
- 二叉搜索树最低访问代价问题C语言
- jar包冲突
- linux下使用SDCC开发MCS51单片机
- 对AI领域的会议的评点