gpt4 book ai didi

复制文件的 C# 代码,这个片段可以改进吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:07 29 4
gpt4 key购买 nike

通过本地 LAN 共享复制大约 50 GB 的数据时,由于连接问题,复制失败大约 10 GB。

我已将复制的 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;
}

编辑:

根据 Thomas 给出的答案,我正在尝试压缩文件。传统上,作为最终用户,我们使用压缩文件然后进行复制。作为程序员,我们可以同时压缩和复制文件吗?我的意思是压缩的部分通过电线发送?

最佳答案

你对嵌套循环做了太多的工作。

您应该删除内部的“foreach”并将其替换为一些代码:

(1)构造你要查找的文件名

(2) 使用 File.Exists() 查看是否存在,然后

(3) 继续您当前在“if (Path.GetFileName(remoteSrcFile)...”条件之后的同一代码块。

像这样:

foreach (string remoteSrcFile in Directory.EnumerateFiles(remoteRepository, "*.*", SearchOption.AllDirectories))
{
string localSrcFile = Path.Combine(localRepository, Path.GetFileName(remoteSrcFile));

if (File.Exists(localSrcFile))
{
...
}
}

关于复制文件的 C# 代码,这个片段可以改进吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12490594/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com