I have tried Parallel.ForEach
, but some files uploaded with zero sizes. Uusing normal for each loop working fine. But it is slow. There are 4 million files. Size of each file is 4 MB.
public static bool UploadFiles(
string ftpDirectory, string filePath, ConnectionInfo coninfo, string pattern)
{
using (var client = new SftpClient(coninfo))
{
client.Connect();
client.ConnectionInfo.Timeout = TimeSpan.FromDays(2);
client.KeepAliveInterval = TimeSpan.FromSeconds(60);
// 4 millions files
var files = Directory.GetFiles(filePath, pattern , SearchOption.AllDirectories);
foreach (var file in files)
{
try
{
using (Stream inputStream = new FileStream(file, FileMode.Open))
{
client.UploadFile(inputStream, ftpDirectory + Path.GetFileName(file));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
};
client.Disconnect();
}
return true;
}