我有一个读取和写入大量数据的程序。当写入本地驱动器上的文件时,读取和写入工作良好。当目标是网络共享时,并且当我运行同一程序的两个实例时,第一个启动的程序会挂起在WriteFile上。当我调试时,网络共享上的WriteFile被阻塞。通过网络共享文件上的WriteFile
我用WaitForSingleObject(超时60秒)在WriteFile上实现了重叠IO。现在WriteFile不再阻塞,但是即使整个数据一次都通过网络写入,也没有。当我通过网络共享使用WriteFile时,是否需要考虑重试?如何通过网络在文件上正确使用WriteFile?
更新:
我所指向的下面的链接来实现与WriteFile的重叠IO。
http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/a5e9514b-53e0-410c-a975-41a5ca91e4be
链接说,我用CreateFile单独GENERIC_WRITE没有GENERIC_READ。但是,如果我也想从文件中读取 - 如果这意味着我无法实现WriteFile的asyn io。实际上,我必须在使用重叠IO写入文件之前从同一文件读取头文件。我怎样才能做到这一点??
readfile将数据异步读取到缓冲区,并将缓冲区传递到写入文件。这是针对速度优化的原始文件IO。只有当我尝试将数据写入网络共享时,问题才会发生。在这种情况下重试是否有意义? –
我想我得到了这个答案。一个MSDN论坛链接表示带有GENERIC_READ | GENERIC_WRITE标志的CreateFile将与WriteFile函数同步运行。但是如果我在CreateFile中只使用GENERIC_WRITE,当网络连接关闭时,WriteFile将返回网络错误。将测试和确认相同。 –