2011-07-22 38 views
0

我有一个读取和写入大量数据的程序。当写入本地驱动器上的文件时,读取和写入工作良好。当目标是网络共享时,并且当我运行同一程序的两个实例时,第一个启动的程序会挂起在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写入文件之前从同一文件读取头文件。我怎样才能做到这一点??

回答

0

您使用重叠IO的方法是正确的。但是你一次写多少数据呢? WriteFile要么失败成功,不需要执行重试。然而,您可能会将数据写入部分内容,而不是整体编写。

你提到你正在使用文件共享,这意味着你正在写入一个文件。为什么不使用CopyFile来代替;或将所有数据复制到文件并通过网络发送?

+0

readfile将数据异步读取到缓冲区,并将缓冲区传递到写入文件。这是针对速度优化的原始文件IO。只有当我尝试将数据写入网络共享时,问题才会发生。在这种情况下重试是否有意义? –

+0

我想我得到了这个答案。一个MSDN论坛链接表示带有GENERIC_READ | GENERIC_WRITE标志的CreateFile将与WriteFile函数同步运行。但是如果我在CreateFile中只使用GENERIC_WRITE,当网络连接关闭时,WriteFile将返回网络错误。将测试和确认相同。 –