C#用FileStream读取'Zip'文件

时间:2009-01-11 23:41:10

标签: c# zip filestream tcpclient

我编写了一个程序,它将使用TCPClient与远程计算机建立网络连接我正在使用它将100k块的文件传输到远程.net应用程序,然后将它们写入HardDrive。除了ZIP文件之外,所有文件传输都很好 - 很奇怪注意到重新组合的文件总是98K ... ZIP文件有一些黑暗的秘密,阻止它们以这种方式处理。同样,所有其他文件传输工作正常,图像,xls,txt,chm,exe等。

困惑

3 个答案:

答案 0 :(得分:3)

好吧,你没有显示任何代码,所以说出确切的错误是有点棘手的。

通常的错误是假设Stream.Read读取您要求它的所有数据,而不是意识到它可能读得更少,但它实际的数量 read是返回值。

换句话说,代码不应该是:

byte[] buffer = new byte[input.Length];
input.Read(buffer, 0, buffer.Length);
output.Write(buffer, 0, buffer.Length);

但是像:

byte[] buffer = new byte[32 * 1024];
int bytesRead;
while ( (bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
    output.Write(buffer, 0, bytesRead);
}

但这只是猜测。如果你可以发布一些代码,我们就有更好的机会把它搞清楚。

答案 1 :(得分:1)

实际代码会有所帮助。

您使用的是BinaryReader / BinaryWriter吗?

(即基于数据而非基于文本)。

您可以尝试使用hex文件比较(例如Beyond Compare)来比较原始文件和副本,看看是否能为您提供任何线索。

答案 2 :(得分:0)

可能是您在收到每个块时覆盖(而不是附加)现有文件?因此,文件的最终大小将是< =一个块的大小。

但是没有任何代码,很难说出问题的原因。