LARGE_INTEGER//结构体
BOOL WINAPI GetFileSizeEx(//文件大小
In HANDLE hFile,
Out PLARGE_INTEGER lpFileSize
);//64位,32位弃用
typedef union _LARGE_INTEGER {
struct {
DWORD LowPart;
LONG HighPart;
};
struct {
DWORD LowPart;
LONG HighPart;
} u;
LONGLONG QuadPart;//大小
} LARGE_INTEGER, *PLARGE_INTEGER;
LARGE_INTEGER largeFileSize = { 0 };
GetFileSizeEx(clsFile.GetHandle(), &largeFileSize);
std::cout << "File Size:" << largeFileSize.QuadPart << std::endl;
// 磁盘上占用的大小,可能有磁盘压缩
largeFileSize.LowPart = GetCompressedFileSizeW(clsFile.GetPath(),(LPDWORD)(&(largeFileSize.HighPart)));
std::cout << "File Compressed Size:" << largeFileSize.QuadPart << std::endl;
读写
ReadFile(
In HANDLE hFile,
Out_writes_bytes_to_opt(nNumberOfBytesToRead, *lpNumberOfBytesRead) __out_data_source(FILE) LPVOID lpBuffer,//buffer,单位是BYTE,
In DWORD nNumberOfBytesToRead,//读多少BYTE到buffer里去
Out_opt LPDWORD lpNumberOfBytesRead,//成功读取类多少
Inout_opt LPOVERLAPPED lpOverlapped//同步,异步
);
//同步I/O
// 读
BYTE bBuffer[MAXBYTE] = { 0 };
DWORD dwReadSize = 0;
if(ReadFile(clsFile.GetHandle(), bBuffer, MAXBYTE, &dwReadSize, nullptr))
std::cout << (char*)bBuffer << std::endl;
// 写
DWORD dwWrite = 0;
if (WriteFile(clsFile.GetHandle(), bBuffer, MAXBYTE, &dwWrite, nullptr))
std::cout << "写入成功" << std::endl;
64位偏移量
setFilePointerEx()
SetFilePointerEx(
_In_ HANDLE hFile,
_In_ LARGE_INTEGER liDistanceToMove,//需要移动多少个字节
_Out_opt_ PLARGE_INTEGER lpNewFilePointer,//移动完了之后所在的位置
_In_ DWORD dwMoveMethod//FILE_BEGIN FILE_END FILE_CURRENT
);
bt用此方法设置与目标文件大小一致
//文件本身大22,设置为1024方便读取传输
//largeFileSize.QuadPart = 1024;手工设置大小
SetFilePointerEx(clsFile.GetHandle(), largeBegin, nullptr, FILE_BEGIN);
SetEndOfFile(clsFile.GetHandle());//设置文件尾