通过网络共享在文件上写入文件

时间:2011-07-22 18:30:37

标签: visual-c++ networking share 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。实际上我必须在使用Overlapped IO写入文件之前从同一文件中读取标题。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

使用重叠IO的方法是正确的。但是你一次写下多少数据呢? WriteFile要么成功失败,要么不需要实现重试。但是,您可以分批编写数据,而不是整体编写。

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