如何从FTP下载时从流中读取/写入空终止字符串

时间:2013-09-10 22:52:12

标签: c# ftp download

我正在开发一个Updater,它下载一个updatelist.xml文件,其中包含有关FTP服务器上文件的信息(哈希码,文件名和文件目录)。

然后它在本地计算机上获取这些文件的信息,如果它们不同(基于哈希码),更新程序将继续从ftp服务器下载更新的文件。

这很好用,但是在txt文件方面我遇到了一些问题。基本上,当我正在编写文件时,它不会写入以空字符结尾的字符串,例如:

这是FTP服务器上的文件:

"Come Lads! How does things go?
I see my youth in you and it makes

将文件下载到本地计算机后,该文件为同一文件:

"Come Lads! How does things go?I see my youth in you and it makes

我一直在网上搜索信息,但我不明白如何解决这个问题。

这是代码的一部分,我认为这是重要的部分。

FileStream file;
file = File.Open(downloadFilePath, FileMode.Create);

byte[] buffer = new byte[1024 * 30];

int read;
long downloaded = 0;
while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0)
{
    downloaded += read;

    string text = string.Format("Descargando archivo {0} de {1}: {2} - {3} / {4}", curFiles, totalFiles,
        xn["Name"].InnerText, BytesToString(downloaded), BytesToString(contentLength));

    label_progreso.Text = text;

    progressBar2.Value = (int)ProgressBarValue(downloaded, contentLength);

    file.Write(buffer, 0, read);
}

显然问题是,当程序创建并写入文件时,它不会写入以空字符结尾的字符串。

我缺少什么?

我使用webclient.download而不是FtpWebRequest找到了信息,我已经尝试了但是它也不起作用。

1 个答案:

答案 0 :(得分:0)

您应始终关闭FileStream个对象。试试using声明

using(FileStream file = File.Open(downloadFilePath, FileMode.Create))
{
    //code
}