雖然通過本地局域網共享複製大約50 GB的數據,由於連接問題拷貝失敗大約10 GB複製。複製文件的C#代碼,可以改進此片段嗎?
我已重命名複製的數據目錄的10GB到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;
}
編輯:
基於由托馬斯給我試圖壓縮文件的答案。 傳統上作爲最終用戶,我們使用來壓縮文件,然後複製。作爲程序員,我們可以並行壓縮和複製文件嗎?我的意思是已經壓縮的部分通過電線發送它?
類似這樣的問題應該問的[代碼審查(http://codereview.stackexchange.com) –