This repository has been archived on 2022-09-30. You can view files and clone it, but cannot push or open issues or pull requests.
bookmark-manager/RyzStudio/IO/SharpZipLib.cs
2019-04-21 18:53:56 +01:00

124 lines
3.3 KiB
C#

namespace RyzStudio.IO
{
using System;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
public class SharpZipLib
{
public static bool IsZipEncrypted(string filename)
{
bool rv = false;
try
{
ZipInputStream zipStream = new ZipInputStream(File.OpenRead(filename));
ZipEntry zipEntry = null;
while ((zipEntry = zipStream.GetNextEntry()) != null)
{
if (zipEntry.IsCrypted)
{
rv = true;
}
break;
}
zipStream.Close();
}
catch
{
// do nothing
}
return rv;
}
public static bool TestZipEncrypted(string filename, string password)
{
bool rv = false;
int size = 2;
byte[] buffer = new byte[size];
int bufferSize = 0;
ZipEntry readEntry = null;
ZipInputStream readStream = new ZipInputStream(File.OpenRead(filename));
readStream.Password = password;
while (true)
{
readEntry = readStream.GetNextEntry();
if (readEntry == null)
{
break;
}
if (string.IsNullOrWhiteSpace(readEntry.Name))
{
continue;
}
if (!readEntry.IsFile)
{
continue;
}
if (readEntry.Size <= 0)
{
continue;
}
try
{
bufferSize = readStream.Read(buffer, 0, buffer.Length);
rv = true;
}
catch
{
break;
}
break;
}
return rv;
}
public static void AddFile(ZipOutputStream zipStream, string filename, string prefixPath = null)
{
byte[] buffer = new byte[4096];
string f1 = "";
if (prefixPath != null)
{
f1 = Path.GetDirectoryName(filename).TrimEnd('\\') + "\\";
f1 = f1.Replace(prefixPath, "").TrimEnd('\\') + "\\";
f1 = f1 + Path.GetFileName(filename);
f1 = f1.TrimStart('\\');
}
ZipEntry zipEntry = new ZipEntry(f1);
zipEntry.DateTime = DateTime.Now;
zipStream.PutNextEntry(zipEntry);
FileStream fileStream = File.OpenRead(filename);
int sourceBytes;
do
{
sourceBytes = fileStream.Read(buffer, 0, buffer.Length);
zipStream.Write(buffer, 0, sourceBytes);
}
while (sourceBytes > 0);
}
public static void AddFolder(ZipOutputStream zipStream, string folderPath, string prefixPath = null)
{
foreach (string fn in Directory.GetFiles(folderPath, "*.*", System.IO.SearchOption.AllDirectories))
{
AddFile(zipStream, fn, prefixPath);
}
}
}
}