0

大きなデータを読み書きするプログラムがあります。読み取りと書き込みは、書き込みがローカル ドライブ上のファイルに対して行われる場合にうまく機能します。ターゲットがネットワーク共有で、同じプログラムの 2 つのインスタンスを実行すると、最初に起動したプログラムが WriteFile でハングします。デバッグすると、ネットワーク共有の WriteFile がブロックされます。

WaitForSingleObject(timeout 60 Sec) を使用して、WriteFile にオーバーラップ IO を実装しました。現在、WriteFile はブロックされなくなりましたが、データ全体がネットワーク経由で 1 回書き込まれることはありません。ネットワーク共有経由で WriteFile を使用する場合、再試行を考慮する必要がありますか?? ネットワーク上のファイルで WriteFile を適切に使用するには?

アップデート:

以下のリンクを参考に、WriteFile でオーバーラップした IO を実装しました。

http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/a5e9514b-53e0-410c-a975-41a5ca91e4be

リンクには、GENERIC_READ なしで GENERIC_WRITE だけで CreateFile を使用したことが示されています。しかし、ファイルからも読み取りたい場合はどうなりますか?それは、WriteFile に ayn io をまったく実装できないことを意味しますか? 実際には、重複した IO を使用してファイルに書き込む前に、同じファイルからヘッダーを読み取る必要があります。これどうやってするの??

4

1 に答える 1

0

重複した IO を使用するアプローチは正しいです。しかし、一度に書き込むデータの量はどれくらいですか? WriteFile は成功するか失敗するかのいずれかであり、再試行を実装する必要はありません。ただし、データ全体を書き込むのではなく、部分的に書き込むこともできます。

あなたはファイル共有を使用していると述べました。つまり、ファイルに書き込んでいます。代わりに CopyFile を使用しないでください。またはすべてのデータをファイルにコピーしてネットワーク経由で送信しますか?

于 2011-07-22T18:39:23.437 に答える