我编写了一个程序,该程序将使用 TCPClient 建立与远程计算机的网络连接,我正在使用它将 100k 块中的文件传输到远程 .net 应用程序,然后将它们写入硬盘驱动器。除了 ZIP 文件之外,所有文件传输都运行良好 - 奇怪的是,重新组合的文件始终为 98K ...... ZIP 文件是否存在一些不为人知的秘密,以防止以这种方式处理它们。同样,所有其他文件传输工作正常,图像、xls、txt、chm、exe 等。
使困惑
我编写了一个程序,该程序将使用 TCPClient 建立与远程计算机的网络连接,我正在使用它将 100k 块中的文件传输到远程 .net 应用程序,然后将它们写入硬盘驱动器。除了 ZIP 文件之外,所有文件传输都运行良好 - 奇怪的是,重新组合的文件始终为 98K ...... ZIP 文件是否存在一些不为人知的秘密,以防止以这种方式处理它们。同样,所有其他文件传输工作正常,图像、xls、txt、chm、exe 等。
使困惑
好吧,您还没有显示任何代码,所以要准确地说出什么是错的有点棘手。
通常的错误是假设 Stream.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);
}
但这只是一个猜测。如果您可以发布一些代码,我们将有更好的机会弄清楚它。
实际的代码会有所帮助。
你在使用 BinaryReader / BinaryWriter 吗?
(即基于数据而不是基于文本)。
您可以尝试使用十六进制文件比较(例如Beyond Compare)来比较原始文件和副本,看看是否能给您任何线索。
可能是您在收到每个块时覆盖(而不是附加到)现有文件?因此文件的最终大小将是 <= 一个块的大小。
但是没有任何代码,很难说出问题的原因。