【问题标题】:How to read / write a null terminated string from stream while downloading from FTP从 FTP 下载时如何从流中读取/写入以空字符结尾的字符串
【发布时间】:2013-09-10 22:52:11
【问题描述】:

我正在开发一个更新程序,它会下载一个 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 的信息,我已经尝试过,但它也不起作用。

【问题讨论】:

  • 是什么让您认为空字符与您的问题有关? C# 不关心空终止。 C# 中的字符串是任意字符序列 - 包括 null。
  • 您好约翰,感谢您的回复。主要问题是,由于程序在本地 pc 中下载(写入)文本文件的方式,它没有与 ftp 服务器上文件相同的哈希码,因此每次我打开更新程序时,它都会下载相同的即使已下载文件。正如您所说,问题可能是其他问题,但我找不到下载原始格式文件的方式,如果哈希码必须与原始文件相同,这很重要。 (对不起我的英语)
  • 你试过WebClient.DownloadFile方法了吗?试试看,看看目标文件中的字节数,然后逐字节检查。源系统和目标系统都运行 Windows 吗?如果不是,那么可能根本就没有 be 等价物:例如,换行符可能不同。

标签: c# ftp download


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2015-11-01
    相关资源
    最近更新 更多