2

我编写了一个程序,该程序将使用 TCPClient 建立与远程计算机的网络连接,我正在使用它将 100k 块中的文件传输到远程 .net 应用程序,然后将它们写入硬盘驱动器。除了 ZIP 文件之外,所有文件传输都运行良好 - 奇怪的是,重新组合的文件始终为 98K ...... ZIP 文件是否存在一些不为人知的秘密,以防止以这种方式处理它们。同样,所有其他文件传输工作正常,图像、xls、txt、chm、exe 等。

使困惑

4

3 回答 3

3

好吧,您还没有显示任何代码,所以要准确地说出什么是错的有点棘手。

通常的错误是假设 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);
}

但这只是一个猜测。如果您可以发布一些代码,我们将有更好的机会弄清楚它。

于 2009-01-11T23:48:48.953 回答
1

实际的代码会有所帮助。

你在使用 BinaryReader / BinaryWriter 吗?

(即基于数据而不是基于文本)。

您可以尝试使用十六进制文件比较(例如Beyond Compare)来比较原始文件和副本,看看是否能给您任何线索。

于 2009-01-12T00:23:54.297 回答
0

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

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

于 2009-01-11T23:47:25.213 回答