C#使用并行任务从FTP多次下载-重复下载问题
本文关键字:下载 -重 问题 FTP 并行任务 | 更新日期: 2023-09-27 18:26:45
我面临一个奇怪的问题,我想从FTP下载一个文件列表。我更喜欢并行任务。下面是我的代码。问题是,所有的文件列表都在下载,但会生成不同名称的重复文件。我对并行任务的概念很陌生。请帮我找出问题所在。
注意:我使用SSH.Net进行sftp连接和下载。
private void ConcurrentDownload()
{
// Declaring Connection Information
PasswordAuthenticationMethod pm = new PasswordAuthenticationMethod("FTPUserName", "Password");
ConnectionInfo connectionInfo = new ConnectionInfo("FTPHost", 22, "FTPUserName", ProxyTypes.Socks5, "127.0.0.1", 8080, string.Empty, string.Empty, pm);
using (SftpClient sfc = new SftpClient(connectionInfo))
{
// Establish the remote connection
sfc.Connect();
// Getting Remote Directory Contents
IEnumerable<SftpFile> sFiles = new List<SftpFile>();
sFiles = sfc.ListDirectory(".''");
// Building the File List
List<string> remotefiles = new List<string>();
foreach (SftpFile sfile in sFiles)
{
if (!sfile.IsDirectory)
{
string ss = sfile.Name;
remotefiles.Add(ss);
}
}
// Parallel Download
Parallel.ForEach(remotefiles.Distinct(), file => DownloadFile(sfc, file));
sfc.Disconnect();
}
}
private void DownloadFile(SftpClient sf, string RemoteFileName)
{
using (Stream ms = File.OpenWrite(RemoteFileName))
{
sf.DownloadFile(RemoteFileName, ms);
}
}
您最好像下面的一样使用Distinct
Parallel.ForEach(remotefiles.Distinct(), file => DownloadFile(sfc, file));
若有重复的文件名,当并行处理开始于同一个文件时,那个么重复的文件会出现异常。
而且你们并没有下载到另一个位置,你们正在做的是下载到相同的ftp源位置。这是正确的吗?
我会给出不同的下载目录,从源文件中获取文件名,然后下载到下面的位置
private void DownloadFile(SftpClient sf, string RemoteFileName)
{
string downloadTo = Path.Combine(DownloadDirectoryPath, Path.GetFileName(RemoteFileName));
using (Stream ms = File.OpenWrite(downloadTo))
{
sf.DownloadFile(RemoteFileName, ms);
}
}
相关参考:并行中的SFTP异步上载