当我使用.NET WebClient DownloadFileAsync时,我随机获得返回的零长度文件

时间:2014-04-08 12:52:47

标签: c# .net asynchronous async-await webclient

我正在尝试从我的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会随机返回零字节?

2 个答案:

答案 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/