1

あるディレクトリから別のディレクトリに 2GB 程度の大きなファイルを移動するために使用File.Moveします。移動先のフォルダを監視し、新しいファイルがあれば CDN にアップロードします。ただし、CDN への部分的なファイル アップロードが発生しました。つまり、同じファイルがソース ディレクトリから宛先ディレクトリに移動している間に、それぞれのファイルが CDN にアップロードされました。では、ファイルの移動が完了するまで File.Move がファイルの移動先フォルダーをロックするかどうかを知る必要がありますか?

4

2 に答える 2

1

CDN への部分的なアップロードを避けるためにできることは、移動するときに最初に非表示にし、完全に完了したら再表示することです。また、ファイルがまだ隠されている場合は、監視ツール で CDN に転送しないようにします。

または、ストリームが終了するまで他のプロセス (監視ツールである CuteFTP) が宛先ファイルにアクセスできないようにロックアウトすることもできます。

例えば

    static void Main(string[] args)
    {
        string sourcePath = "mytext.txt";
        string destPath = @"dest\mytext.txt";
        using (FileStream sourceStream = new FileStream(sourcePath, FileMode.Open))
        {
            using (FileStream destStream = new FileStream(destPath, FileMode.Create))
            {
                destStream.Lock(0, sourceStream.Length);
                sourceStream.CopyTo(destStream);
            }
        }

        if (File.Exists(sourcePath))
        {
            File.Delete(sourcePath);
        }
    }
于 2013-06-13T12:45:41.330 に答える
1

あなたの問題は、宛先フォルダーでの監視です。

大きなファイルがあるため、コピーに時間がかかるため、次のようになります。

  1. ファイルの移動を開始します
  2. 監視システムが作動し、CDN へのアップロードを開始します
  3. ファイルは部分的にアップロードされました
  4. ファイルの移動を終了します。

これに対する軽減策の 1 つは、監視システムが何らかの拡張子を持つファイルを検索すると仮定するとMyBigFile.extMyBigFile.ext.tmp. 終了後、名前を に戻すとMyBigFile.ext、監視開始時に完全なファイルが含まれます。

于 2013-06-13T12:45:00.063 に答える