WriteFile异步操作的追加问题

在使用多个WriteFile异步写入文件时,可能存在数据覆盖问题,即使使用SetFilePointer将文件指针置于末尾。原因是操作系统在异步操作中不维护文件指针。解决方法是,在每次写操作前,通过SetFilePointer获取当前文件位置作为偏移量,并保存到OVERLAPPED结构体中,确保写操作从正确位置开始。
摘要由CSDN通过智能技术生成

     当采用多个WriteFile函数异步地给一个文件写入数据时,会遇到后写的数据对前面已写数据的覆盖问题,即使是采用SetFilePointer这个函数来把文件指针指向文件末尾再追加,也会造成覆盖的问题。

     对一个文件已异步方式进行操作时打开文件方式如下:

      HANDLE hDevice3 = CreateFile("D://douyun.txt",
                                                         GENERIC_READ | GENERIC_WRITE,
                                                          FILE_SHARE_READ, NULL,
                                                          OPEN_ALWAYS,
                                                           FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
                                                           NULL);

    主要是要设置倒数第二个参数的属性 FILE_FLAG_OVERLAPPED

    overlap4.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL); 

 

    写操作为

     WriteFile( hDevice3,
                     pbuffer2,
                     len2, &dwWrite2,
                     &overlap4);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值