断続的な接続に耐えられる Windows ネットワーク共有を介してファイルをコピーする堅牢な方法を探しています。このアプリケーションは、大規模な病院のワイヤレス モバイル ワークステーションでよく使用されます。接続が一瞬または一度に数分間失われる可能性があると思います。関連するファイルのサイズは通常、約 200KB ~ 500KB です。アプリケーションは VB6 で作成されていますが (うーん)、Windows DLL 呼び出しを使用することがよくあります。
ありがとう!
断続的な接続に耐えられる Windows ネットワーク共有を介してファイルをコピーする堅牢な方法を探しています。このアプリケーションは、大規模な病院のワイヤレス モバイル ワークステーションでよく使用されます。接続が一瞬または一度に数分間失われる可能性があると思います。関連するファイルのサイズは通常、約 200KB ~ 500KB です。アプリケーションは VB6 で作成されていますが (うーん)、Windows DLL 呼び出しを使用することがよくあります。
ありがとう!
これにはRobocopyを使用して優れた結果を得ました。デフォルトでは、ファイルが通過するまで 30 秒ごとに再試行します。
BITS (バックグラウンド インテリジェント転送サービス) を使用してみてください。これは、Windows Update が使用するインフラストラクチャであり、Win32 API を介してアクセスでき、これに対処するために特別に構築されています。
通常、アプリケーションの更新に使用されますが、ファイルを移動するあらゆる状況でうまく機能するはずです。
あなたの実際の問題が何であるかについては不明なので、いくつかの考えを捨てます。
私がこれまでに知っていることに基づいて、次の擬似コードが私のアプローチになると思います。
sourceFile = Compress("*.*");
destFile = "X:\files.zip";
int copyFlags = COPYFILEFAILIFEXISTS | COPYFILERESTARTABLE;
while (CopyFileEx(sourceFile, destFile, null, null, false, copyFlags) == 0) {
do {
// optionally, increment a failed counter to break out at some point
Sleep(1000);
while (!IsNetworkAlive(NETWORKALIVELAN));
}
最初にファイルを圧縮すると、どのファイルが正常にコピーされ、どのファイルを再起動する必要があるかを追跡できます。また、両側でいくらかの CPU パワーを犠牲にして、コピーを高速化する必要があります (合計ファイル サイズが小さくなり、単一ファイル サイズが大きくなります)。単純なバッチ ファイルを使用すると、サーバー側で解凍できます。
私は解決策としてRobocopyに同意します...それがユーティリティが「ロバストファイルコピー」と呼ばれる理由です
これにはRobocopyを使用しましたが、優れた結果が得られました。デフォルトでは、ファイルが通過するまで30秒ごとに再試行します。
そして、デフォルトでは、100万回の再試行が行われます。断続的な接続にはこれで十分です。
また、再起動可能な転送を実行し、他のプログラムが同じ接続(/ IPGスイッチ)を使用しているため、すべての帯域幅を使用したくない場合は、パケット間にギャップがある転送を抑制することもできます。
うーん、rsyncがそれを行うようで、server / daemon/installを必要としないと思いました-$rsyncsrcdstだけです。
ファイルの送信後または送信前に単純にハッシュを送信し、それを受信したファイルと比較するのはどうですか? 少なくとも、正しいファイルがあることを確認する必要があります。
全部やりたい場合は、同じプロセスを実行できますが、ファイルの小さな部分に対してです。次に、すべてのピースが揃ったら、受信側でそれらを結合します。
Microsoft SyncToy (無料) を使用できます。
利用可能な場合は SMS が機能します。