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());//設置文件尾