Windows 文件操作

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());//设置文件尾
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值