文件截取的实现

    由于项目在进行空间管理的过程中需要对存储空间进行紧缩,然后释放多余的空间,经过资料的查找得知可以用以下函数进行实现:CreateFile、SetFilePointer、SetEndOfFile、GetFileSizeEx。综合使用方法如下面代码所示:

////////////////////////////////////////////////////////////////////////// // 截取文件 // 作者:陈相礼 // 参数:文件路径 偏移量 // 返回:失败:-1 成功:截取后的文件大小 unsigned long InterceptFile( char *lpFileName, unsigned long dwOffsetSize ) { char strNameBuffer[MAX_PATH]; strcpy_s( strNameBuffer, MAX_PATH, lpFileName ); WCHAR wstr[MAX_PATH]; MultiByteToWideChar( CP_ACP, 0, strNameBuffer, (int)strlen(strNameBuffer), wstr, (int)sizeof(strNameBuffer) ); wstr[strlen(lpFileName)] = '/0'; // 打开文件 HANDLE hFile = ::CreateFile( wstr , //创建文件的名称。 GENERIC_READ | GENERIC_WRITE, // 写和读文件。 0, // 不共享读写。 NULL, // 缺省安全属性。 OPEN_EXISTING, // 如果文件存在,也创建。 FILE_ATTRIBUTE_NORMAL, // 一般的文件。 NULL); // 模板文件为空。 if (hFile == INVALID_HANDLE_VALUE) { // 失败 return -1; } //移动文件指针到新的位置。 DWORD dwPtr = SetFilePointer( hFile, dwOffsetSize, NULL, FILE_BEGIN ); //设置文件新的结束位置。 ::SetEndOfFile(hFile); //获取文件的大小。 LARGE_INTEGER liFileSize; ::GetFileSizeEx(hFile,&liFileSize); //关闭文件。 if (hFile != INVALID_HANDLE_VALUE) { CloseHandle(hFile); } return liFileSize.LowPart; }

你可能感兴趣的:(文件截取的实现)