【问题标题】:C# Reading 'Zip' files with FileStreamC# 使用 FileStream 读取“Zip”文件
【发布时间】:2009-01-13 05:57:20
【问题描述】:
我编写了一个程序,该程序将使用 TCPClient 建立与远程计算机的网络连接,我正在使用它将 100k 块中的文件传输到远程 .net 应用程序,然后将它们写入硬盘驱动器。除了 ZIP 文件之外,所有文件传输都运行良好 - 奇怪的是,重新组合的文件始终为 98K ...... ZIP 文件是否存在一些不为人知的秘密,以防止以这种方式处理它们。同样,所有其他文件传输工作正常,图像、xls、txt、chm、exe 等。
困惑
【问题讨论】:
标签:
c#
zip
filestream
tcpclient
【解决方案1】:
嗯,你没有显示任何代码,所以很难准确地说出哪里出了问题。
通常的错误是假设 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);
}
但这只是猜测。如果您可以发布一些代码,我们将有更好的机会解决它。
【解决方案2】:
实际的代码会很有帮助。
你在使用 BinaryReader / BinaryWriter 吗?
(即基于数据而不是基于文本)。
您可以尝试使用十六进制文件比较(例如Beyond Compare)来比较原始文件和副本,看看是否可以为您提供任何线索。
【解决方案3】:
可能是您正在覆盖(而不是附加到)现有文件并收到每个块?因此文件的最终大小将是
但是没有任何代码,很难说出问题的原因。