gpt4 book ai didi

c# - 如何在 Xamarin for Android 中压缩文件?

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

我有一个函数,它创建一个 zip 文件,传递文件的字符串数组。该函数确实成功创建了 zip 文件和其中的 zip 条目文件,但这些 zip 条目文件是空的。我尝试了几种不同的方法 - 下面的函数代码是我所获得的最接近工作的代码:

    public static bool ZipFile(string[] arrFiles, string sZipToDirectory, string sZipFileName)
{
if (Directory.Exists(sZipToDirectory))
{
FileStream fNewZipFileStream;
ZipOutputStream zos;

try {
fNewZipFileStream = File.Create(sZipToDirectory + sZipFileName);
zos = new ZipOutputStream(fNewZipFileStream);

for (int i = 0; i < arrFiles.Length; i++) {
ZipEntry entry = new ZipEntry(arrFiles[i].Substring(arrFiles[i].LastIndexOf("/") + 1));
zos.PutNextEntry(entry);

FileStream fStream = File.OpenRead(arrFiles[i]);
BufferedStream bfStrm = new BufferedStream(fStream);

byte[] buffer = new byte[bfStrm.Length];
int count;
while ((count = bfStrm.Read(buffer, 0, 1024)) != -1) {
zos.Write(buffer);
}

bfStrm.Close();
fStream.Close();
zos.CloseEntry();
}
zos.Close();
fNewZipFileStream.Close();
return true;
}
catch (Exception ex)
{
string sErr = ex.Message;
return false;
}
finally
{
fNewZipFileStream = null;
zos = null;
}
}
else
{
return false;
}
}

我认为这与字节流处理有关。我试过这段处理流的代码,但它进入了无限循环:

while ((count = fStream.Read(buffer, 0, 1024)) != -1) {
zos.Write(buffer, 0, count);
}
fStream.Close();

最佳答案

我找到了一个非常简单的解决方案 - 我使用了静态文件类的 ReadAllBytes 方法。

ZipEntry entry = new ZipEntry(arrFiles[i].Substring(arrFiles[i].LastIndexOf("/") + 1));
zos.PutNextEntry(entry);

byte[] fileContents = File.ReadAllBytes(arrFiles[i]);
zos.Write(fileContents);
zos.CloseEntry();

关于c# - 如何在 Xamarin for Android 中压缩文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25859020/

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