ローカル LAN 共有経由で約 50 GB のデータをコピーしているときに、接続の問題により、約 10 GB のコピーでコピーに失敗しました。
コピーした 10 GB のデータ ディレクトリの名前を localRepository に変更し、ファイルがローカル リポジトリに見つからない場合にのみ、リモート サーバーからコピー先にファイルをコピーする C# プログラムを作成しました。見つかった場合は、ファイルをローカル リポジトリから宛先フォルダーに移動します。
コードは正常に機能し、タスクを非常にうまく達成しましたが。私は、最も効率的なコードを書いたのでしょうか? 改善点は見つかりましたか?
string destinationFolder = @"C:\DataFolder";
string remoteRepository = @"\\RemoteComputer\DataFolder";
string localRepository = @"\\LocalComputer\LocalRepository";
protected void Page_Load(object sender, EventArgs e)
{
foreach (string remoteSrcFile in Directory.EnumerateFiles(remoteRepository, "*.*", SearchOption.AllDirectories))
{
bool foundInLocalRepo = false; ;
foreach (var localSrcFile in Directory.EnumerateFiles(localRepository, "*.*", SearchOption.AllDirectories))
{
if (Path.GetFileName(remoteSrcFile).Equals(Path.GetFileName(localSrcFile)))
{
FileInfo localFile = new FileInfo(localSrcFile);
FileInfo remoteFile = new FileInfo(remoteSrcFile);
//copy this file from local repository
if (localFile.Length == remoteFile.Length)
{
try
{
File.Move(localSrcFile, PrepareDestinationPath(remoteSrcFile));
Debug.WriteLine(remoteSrcFile + " moved from local repo");
}
catch (Exception ex)
{
Debug.WriteLine(remoteSrcFile + " did not move");
}
foundInLocalRepo = true;
break;
}
}
}
if (!foundInLocalRepo)
{
//copy this file from remote repository
try
{
File.Copy(remoteSrcFile, PrepareDestinationPath(remoteSrcFile), false);
Debug.WriteLine(remoteSrcFile + " copied from remote repo");
}
catch (Exception ex)
{
Debug.WriteLine(remoteSrcFile + " did not copy");
}
}
}
}
private string PrepareDestinationPath(string remoteSrcFile)
{
string relativePath = remoteSrcFile.Split(new string[] { "DataFolder" }, StringSplitOptions.None)[1];
string copyPath = Path.GetFullPath(destinationFolder + relativePath);
Directory.CreateDirectory(Path.GetDirectoryName(copyPath));
return copyPath;
}
編集:
トーマスからの回答に基づいて、ファイルを圧縮しようとしています。従来、エンド ユーザーはファイルを圧縮してからコピーしていました。プログラマーとして、ファイルを並行して圧縮してコピーできますか? 圧縮された部分をワイヤーで送るということですか?