我在代码中使用FluentFTP在内部将数据传输到FTP服务器。如果在上传过程中与FTP服务器的连接中断,那么没有异常。
但奇怪的是,并不是所有的日期都会发生这种情况!如果我使用一个 *.7z文件,当连接断开时会出现异常。
我糊涂了!
传输 *.7z文件时,为什么它会识别出连接中断(服务停止)并在服务再次可用时重新启动连接,而使用 *.opus文件时,程序会在等待中停止?
public class FileWatcher
{
public static async Task Main(string[] args)
{
do
{
Console.WriteLine("Und los geht es!");
await UploadFileAsync();
await Task.Delay(15000);
} while (true);
}
static async Task UploadFileAsync()
{
try
{
string[] filePath = Directory.GetFiles(@"C:\temp\ftpupload", "*",
SearchOption.AllDirectories);
var token = new CancellationToken();
using (AsyncFtpClient client = new AsyncFtpClient())
{
client.Host = "192.168.1.100";
client.Port = 21;
client.Credentials.UserName = "test";
client.Credentials.Password = "test123";
client.Config.EncryptionMode = FtpEncryptionMode.None;
client.Config.InternetProtocolVersions = FtpIpVersion.IPv4;
client.Config.ValidateAnyCertificate = true;
client.Config.ConnectTimeout = 10000;
Console.WriteLine("Connecting......");
await client.AutoConnect(token);
Console.WriteLine("Connected!");
foreach (var erg in filePath)
{
Console.WriteLine("File is uploading: " + erg.GetFtpFileName());
await client.UploadFile(erg, "/" + erg.GetFtpFileName(),
FtpRemoteExists.Overwrite, true, token: token);
Console.WriteLine("File successfully uploaded: " +
erg.GetFtpFileName());
System.IO.File.Delete(erg);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
将文件上载到服务器时出错。有关详细信息,请参阅InnerException。
1条答案
按热度按时间ie3xauqp1#
我认为问题在于你没有从Main方法中捕获异常,try-catch块内部的代码可以正确执行,但是如果异常发生在try-catch块外部,程序将终止,而不报告错误。
因此,要修复它,您应该在Main方法中添加一个try-catch块,并在其中使用await关键字调用UploadFileAsync()方法。
另一个原因可能是文件的大小或在Main方法中设置的延迟。