如何使用 c# 以写入模式打开受密码保护的 Zip 文件?

Posted

技术标签:

【中文标题】如何使用 c# 以写入模式打开受密码保护的 Zip 文件?【英文标题】:how to open the password protectd Zip file in write mode by using the c#? 【发布时间】:2015-03-13 12:26:23 【问题描述】:

我已经使用 ionic.zip.dll 使用 zip 保护 csv 文件

看下面的代码

using (ZipFile zip = new ZipFile())

   TargetFileName = TargetNamePrefix;
   OutPutDirectoryPath = TargetLocation + "\\" + TargetNamePrefix + ".zip";                  

   zip.Password = zipFilePassword;
   zip.AddFiles(FilePaths, TargetNamePrefix);
   zip.Save(OutPutDirectoryPath)

这里的文件路径是字符串[] 变量,它由文件(csv/文本)名称组成。 TargetNamePrefix 表示在 zipfile 文件夹内 Name.OutPutDirectoryPath 表示 使用 zipfileName 输出目录。 那么我如何以写模式打开那些受保护的文件,因为我想将数据写入受保护的 csv 文件。

【问题讨论】:

Decompressing password-protected ZIP files with .NET 4.5的可能重复 【参考方案1】:

您可以使用类似的方法提取它们:

using(ZipFile zip = ZipFile.Read(OutPutDirectoryPath))

   zip.Password = zipFilePassword; 
   try 
   
      zip.ExtractAll(TargetLocation);
   
   catch (BadPasswordException e) 
   
      // handle error
   
  

更新 在不提取的情况下访问单个文件条目到流中

string entry_name = TargetNamePrefix + ".csv"; // update this if needed
using (ZipFile zip = ZipFile.Read(OutPutDirectoryPath))

   // Set password for file
   zip.Password = zipFilePassword; 

   // Extract entry into a memory stream
   ZipEntry e = zip[entry_name];
   using(MemoryStream m = new MemoryStream())
   
      e.Extract(m);
      // Update m stream
   

   // Remove old entry
   zip.RemoveEntry(entry_name);

   // Add new entry
   zip.AddEntry(entry_name, m);

   // Save
   zip.Save(OutPutDirectoryPath);

【讨论】:

对不起...我对提取不感兴趣,因为我想保护数据不受外界影响,只需要以写入模式从 ZIP 文件中打开所需的文件请帮助我破解这个.... @Pavan - 查看更新,让我知道这是否适合您。 实际上我需要打开受密码保护的 zip 文件中可用的 csv/txt 文件,我必须使用 SreamWriter 类将数据写入该文件中,请您帮我解决这个问题.. 我可以使用 StreamWriter 类打开密码压缩文件吗 在上面的代码中,您删除了现有文件并添加了相同的新文件,但我只需要在现有文件中写入数据。您能帮我解决这个问题吗...

以上是关于如何使用 c# 以写入模式打开受密码保护的 Zip 文件?的主要内容,如果未能解决你的问题,请参考以下文章

尝试读取或写入受保护的内存

以编程方式打开受密码保护的 VBA 项目

无法打开受密码保护的 zip 存档

在 dotnet core 中打开和编辑受密码保护的 zip

c# emgu/opencv 使用抛出异常 - 试图读取或写入受保护的内存

Visual Studio C# 试图读取或写入受保护的内存。这通常表明其他内存已损坏