gpt4 book ai didi

c# - ZipArchiveEntry Length 是否返回错误的大小?

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:05 26 4
gpt4 key购买 nike

我正在设备上运行一项服务,并想将文件发送到该服务。很简单,但我要发送的文件来自一个 zip 文件,这对我来说变得复杂了。我试图通过将内部文件流发送到设备来实现我的目标,但后来我不得不意识到我正在发送 12 个字节(顺便说一下,这是带有扩展名的内部文件名的长度 - 巧合? ) 比 GetEntry().Length 指示的要多。

我是不是完全遗漏了什么或者我做错了什么?这是当前代码,(注意:此时客户端是一个有效且已连接的 tcp 套接字):

    System.IO.Compression.ZipArchive zfile = System.IO.Compression.ZipFile.Open(_STR_FILENAME, System.IO.Compression.ZipArchiveMode.Read);
System.IO.Compression.ZipArchiveEntry zentry = zfile.GetEntry(_STR_FWNAME);
using (Stream fs = zentry.Open())
{
using(NetworkStream ns = new NetworkStream(client))
{
int i, counter = 0;

while((i = fs.ReadByte()) != -1)
{
ns.WriteByte((byte)i);
counter++;
}

Console.WriteLine("BYTES: " + counter);
Console.WriteLine("LENGTH FILE: " + zentry.Length);
}
}

最佳答案

您发布的代码中没有任何内容可以解释为什么您最后会得到不同的计数。因此,无论发生什么情况,都是在您未包含的某些代码中,或者您发布的代码不是您正在使用的实际代码。

下面是一些代码,它只是打开一个 .zip 文件并在可以从存储流中读取的实际字节旁边显示存储的长度:

static void CheckZipEntries(string fileName)
{
using (Stream inputStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete))
using (ZipArchive archive = new ZipArchive(inputStream, ZipArchiveMode.Read))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
using (Stream entryStream = entry.Open())
{
Console.WriteLine("Entry length: {0}, Stream length: {1}",
entry.Length, GetStreamLength(entryStream));
}
}
}
}

static int GetStreamLength(Stream stream)
{
int count = 0, bytesRead;
byte[] rgb = new byte[1024];

while ((bytesRead = stream.Read(rgb, 0, rgb.Length)) > 0)
{
count += bytesRead;
}

return count;
}

当我对任意数量的 .zip 文件运行此程序时,每个存档条目的两个数字都彼此相同。

所以,我猜你的问题的答案是,不,它实际上并没有这样做。 :)

如果这个答案没有提供足够有用的信息,那么您应该发布一个好的代码示例,一个完整的代码示例,但不要超过绝对必要的大小。参见 https://stackoverflow.com/help/mcve有关为什么以及如何这样做的信息。

关于c# - ZipArchiveEntry Length 是否返回错误的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26712672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com