我正在尝试从我的FTP服务器下载文件 - 同时加倍。当我使用DownloadFileAsync
时,随机文件将返回byte[] Length of 0
。我可以100%确认服务器上存在该文件并且有内容并且FTP服务器(正在运行的Filezilla Server)没有错误,并说该文件已被传输。
private async Task<IList<FtpDataResult>> DownloadFileAsync(FtpFileName ftpFileName)
{
var address = new Uri(string.Format("ftp://{0}{1}", _server, ftpFileName.FullName));
var webClient = new WebClient
{
Credentials = new NetworkCredential(_username, _password)
};
var bytes = await webClient.DownloadDataTaskAsync(address);
using (var stream = new MemoryStream(bytes))
{
// extract the stream data (either files in a zip OR a file);
return result;
}
}
当我尝试这段代码时,它的速度较慢(当然),但所有文件都有内容。
private async Task<IList<FtpDataResult>> DownloadFileAsync(FtpFileName ftpFileName)
{
var address = new Uri(string.Format("ftp://{0}{1}", _server, ftpFileName.FullName));
var webClient = new WebClient
{
Credentials = new NetworkCredential(_username, _password)
};
// NOTICE: I've removed the AWAIT and a different method.
var bytes = webClient.DownloadData(address);
using (var stream = new MemoryStream(bytes))
{
// extract the stream data (either files in a zip OR a file);
return result;
}
}
有人能看到我做错了吗?为什么DownloadFileAsync
会随机返回零字节?
答案 0 :(得分:1)
尝试FtpWebRequest / FtpWebResponse类。您有更多可用于调试目的。
FtpWebRequest - http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest(v=vs.110).aspx FtpWebResponse - http://msdn.microsoft.com/en-us/library/system.net.ftpwebresponse(v=vs.110).aspx
答案 1 :(得分:0)
看看http://netftp.codeplex.com/。似乎几乎所有方法都实现了IAsyncResult。关于如何开始的文档并不多,但我认为它类似于.NET框架中的同步FTP类。您可以在此处安装nuget包:https://www.nuget.org/packages/System.Net.FtpClient/