使用StreamReader和StreamWriter从Solaris复制TGZ文件

时间:2014-02-11 18:01:13

标签: c# encoding io solaris

我们有一个非常旧的文件传递应用程序(IPGear,如果你听说过它,用tcl编写)。我们在那里上传我们的IP文件,我们的客户从系统下载它。

当您将文件上传到此应用程序时,它会将.RCA扩展名添加到上传的文件中,并将一些元数据添加到文件中。如果我们在文本编辑器中查看任何文件的内容(通常是tgz,pdf和文本文件),我们会看到应用程序将一些元数据添加到文件的顶部(5-10行,可读)。

如果您从系统下载文件,他们会以某种方式从文件中删除此元数据并返回TGZ文件,该文件工作正常(我们可以提取)

如果我们在该应用程序保存文件的存储上找到RCA文件并编辑它们通过文本编辑器添加的元数据,我们就可以毫无问题地提取文件了。这也很好。但我们需要为22K文件执行此过程,因此我们需要编写脚本。

我们可以通过StreamReader打开应用程序添加的位,并通过StreamWriter剥离元数据并将文件写入磁盘。但是,如果它是TGZ文件,我们写入系统的文件就会损坏。如果我们为文本文件做同样的事情,它们就可以工作。

当我们在文本编辑器中打开时,tgz文件的内容如下所示

TGZ Content

第29-38行的位是我们剥离的元数据。

看起来,即使我们尝试了不同的编码设置,流读取器也无法将此内容写回磁盘。

关于这一点的另一个注意事项是,我们尝试读取和写入的文件是通过WinSCP从基于Solaris的服务器复制到本地计算机(Windows 7)。

所以,我的问题是,将TGZ文件读入内存(如文本)这样操作的最佳方法是什么,并保存回来而不会损坏?流媒体播放器和编写器不适用于此目的吗?

我尽量提供尽可能多的信息,如果您需要更多说明,请添加评论。

1 个答案:

答案 0 :(得分:1)

  

看起来,即使我们尝试了不同的编码设置,流式读取器也无法将此内容写回磁盘。

是的,因为tgz文件不是纯文本。 StreamReaderStreamWriter用于 text 内容,而不是任意二进制内容。

  

所以,我的问题是,将TGZ文件读入内存(作为文本)的最佳方法是什么

你没有。您将其读作二进制数据,因为二进制数据。

如果TGZ存档包含文本文件,您需要将TGZ解压缩为TAR格式,然后从中提取相关数据。 然后您可以将其作为文本使用。在此之前,它只是二进制数据。

但听起来你实际上可能只想在 TGZ文件之前阅读文本信息 ...在这种情况下你需要找出文本信息结束的地方,而不是读取任何文本信息TGZ文件为文本(因为它不是)。这是非常重要的,但是如果您知道文本是ASCII格式的话会更容易一些 - 您需要弄清楚如何检测文本的结尾和文本的开头虽然真实的内容,我们无法从你给出的截图中真正说出来。