【问题标题】:How can I download files greater that 1MB from FTP using c#如何使用 c# 从 FTP 下载大于 1MB 的文件
【发布时间】:2015-09-29 14:04:22
【问题描述】:

我创建了一个用于从 FTP 下载文件的 C# 应用程序。我无法下载大小超过 1 MB 的文件。下载文件时出现错误“数据已损坏”。这是我的下载代码。

int count = 0;
do
{
    byte[] buffer = new byte[1024];
    conn.ReadTimeout = 15000000;
    count = istream.Read(buffer, 0, buffer.Length);
    memoryStream.Write(buffer, 0, count);
} while (istream.CanRead && count > 0);

byteArray = memoryStream.ToArray();
var workBook = new XLWorkbook(memoryStream);
var workSheet = workBook.Worksheets.First();

【问题讨论】:

  • 如果你想知道它看起来有多大,请创建字节数组的大小:stackoverflow.com/questions/4175874/… 并使你的字节数组达到所需的大小
  • 什么是conn?此外,异常指向屏幕外的某些内容。我们能看到它指向什么吗?
  • -1 不要发布代码的屏幕截图。这使得其他用户很难尝试代码。负责和体贴,并将实际代码作为文本发布给正在回答的人。

标签: c# file download ftp


【解决方案1】:

您的代码的问题是,当您从 istream 读取数据并且没有更多数据时,它将返回计数 0,您需要退出循环,而不是将数据读取到 memoryStream。

试试这个:

while(true)
{
    byte[] buffer = new byte[1024];
    conn.ReadTimeout = 15000000;
    count = istream.Read(buffer, 0, buffer.Length);

    if (count == 0)
        break;

    memoryStream.Write(buffer, 0, count);
}

istream.Close();

byteArray = memoryStream.ToArray();
var workBook = new XLWorkbook(memoryStream);
var workSheet = workBook.Worksheets.First()

在循环之后还要关闭您的 istream,否则下载的文件可能会被截断,这可能是您收到“数据已损坏”错误的原因。

【讨论】:

  • 谢谢。我已经按照上面的 cmets 更新了我的代码。我的问题没有解决。我附上了我遇到的问题的错误屏幕截图。
  • @vijesh 您的异常窗口后面的行似乎离开了屏幕,实际上并没有指向您正在显示的任何代码。 IE 问题不在您显示的任何代码中。
【解决方案2】:

在将数据上传到 FTP 服务器时,防火墙阻止了我的系统的问题。上传的数据在 FTP 服务器上已损坏,我正在尝试使用我的代码下载相同的损坏数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 2023-03-23
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多