A. 在C#里調用icsharpcode.sharpziplib解壓縮文件的問題
【【【【C#壓縮文件】】】】
方法1:
//【filepath想要壓縮文件芹笑的嫌游含地址】
//【zippath輸出壓縮文件的地址】
private void GetFileToZip(string filepath,string zippath)
{ FileStream fs = File.OpenRead(filepath);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close(); FileStream ZipFile = File.Create(zippath);
ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
ZipEntry ZipEntry = new ZipEntry(輸出的文件名稱);
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(6); ZipStream.Write(buffer, 0, buffer.Length);
ZipStream.Finish();
ZipStream.Close();
}
方法2:
private void FileToZip(string path,string address)
{
string name = openFileDialog1.FileName.Substring(openFileDialog1.FileName.LastIndexOf("\\")+1);
FileStream StreamToZip = new FileStream(path, FileMode.Open, FileAccess.Read);
FileStream ZipFile = File.Create(address);
ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
//壓縮文件
ZipEntry ZipEntry = new ZipEntry(name);
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(6);
byte[] buffer = new byte[StreamToZip.Length];
StreamToZip.Read(buffer, 0, Convert.ToInt32(StreamToZip.Length));
ZipStream.Write(buffer, 0, Convert.ToInt32(StreamToZip.Length));
ZipStream.Finish();
ZipStream.Close();
StreamToZip.Close(); }
【【【【【【C#解壓文件】磨彎】】】】】
private void ZipToFile(string path, string addres)
{
ZipInputStream s = new ZipInputStream(File.OpenRead(path));
ZipEntry fileEntry;
while ((fileEntry = s.GetNextEntry()) != null)
{
string filename = Path.GetFileName(fileEntry.Name);
if (filename != "")
{
filename = addres + "\\" + filename;
FileStream streamWriter = File.Create(filename);
int size = 2048;
byte[] buffer = new byte[size]; size = s.Read(buffer, 0, size);
streamWriter.Write(buffer, 0, size);
streamWriter.Close();
}
}
s.Close();
}
【【【【【【C#壓縮目錄】】】】】】
方法1:
//【arg[0]要壓縮的目錄】
//【arg[1]輸出的壓縮文件】
private void DirectoryToZip(string path, string address)
{
//獲取當前文件夾中所有的文件
string[] filenames = Directory.GetFiles(path);
Crc32 crc = new Crc32();
//創建輸出文件(ZIP格式的文件)
ZipOutputStream zos = new ZipOutputStream(File.Create(address));
zos.SetLevel(6);
//遍歷所有的文件
foreach (string name in filenames)
{
FileStream fs = File.OpenRead(name);
byte[] buffer = new byte[fs.Length];
//讀取文件
fs.Read(buffer, 0, Convert.ToInt32(fs.Length));
//獲取文件的文件名稱和後綴名
string file = Path.GetFileName(name);
//輸出文件的名稱
ZipEntry entry = new ZipEntry(file);
crc.Reset();
crc.Update(buffer);
entry.Crc = crc.Value;
zos.PutNextEntry(entry);
zos.Write(buffer, 0, Convert.ToInt32(fs.Length));
fs.Close();
}
zos.Finish();
zos.Close();
} 【【【【【【【【C#讀取壓縮文件(將壓縮文件轉換為二進制)】】】】】】】】
private void GetZipToByte(){
string path = @"C:\Documents and Settings\Administrator\桌面\文件.rar";
FileStream fs = new FileStream(path, FileMode.Open);
bytes = new byte[fs.Length];
int count = Convert.ToInt32(fs.Length);
fs.Read(bytes, 0, count);
}
【【【【【【【【C#將二進制轉換為壓縮文件】】】】】】】】
private void GetByteToZip()
{
string path = @"F:\dom.rar";//壓縮文件的地址
File.WriteAllBytes(path, bytes);
}
B. 使用 C# 讀取 zip 壓縮包解壓文件的方法及注意事項
從 .NET Framework 4.5 版本開始,微軟為 .NET 類庫增加了一個名為 ZipFile 的類型。該類型在 System.IO.Compression 命名空間下,提供創建、解壓縮和打開 zip 存檔的靜態方法。若要在 .NET Framework 應用中使用 ZipFile 類,必須添加對程序集 System.IO.Compression.FileSystem 的引用。
參考鏈接:
https://docs.microsoft.com/zh-cn/dotnet/api/system.io.compression.zipfile?view=net-6.0
使用以下代碼讀取壓縮文件內容:
但是,有時候上述代碼會不好用。當遇到一個較大的 zip 文件時可能會報錯:
關於該錯誤,只能搜索到零星的答案,而且大部分都是從國外網站機翻的沒有任何參考價值。
在 NuGet 上以 zip 為關鍵詞搜索時,排名第二的是一個名為 SharpZipLib 的軟體包。
SharpZipLib : https://www.nuget.org/packages/SharpZipLib/
示例代碼:
在遇到同樣的 zip 包時,上述代碼沒有報錯,但結果仍是錯誤的:ZipFile 類型有一個名為 Count 的屬性,用於獲取該 zip 包中的文件數量。使用一個包含 95 萬個小文件的壓縮包進行測試時,該屬性的取值卻只有 39866 ,也只能獲取到 39866 個文件。脊隱這說明該組件更坑,櫻消廳雖然沒報錯但給了錯誤的數據:
含有 95 萬個文件的 zip 壓縮包
排名第三的軟體包是: DotNetZip ,也是一個比較流行的類庫。
DotNetZip : https://www.nuget.org/packages/DotNetZip/
他的用法和微軟自帶類庫的用法相似:
經測試,該類庫在處理上文提到的文件時沒有報錯,且獲得了正確的文件內容。唯一的遺憾是 Read 方法打開文件時耗時較長。
在處理 zip 文件時,微軟自帶的類庫能滿足大多數需求。如果遇到報錯的情況,在確認源文件橋梁正常的情況下可以更換其他類庫讀取。即使在成功讀取後,也需要核對讀取結果的正確性:沒有報錯,也不代表讀取到的數據就是正確的。
測試文件下載地址:
ftp://opendata:[email protected]/Applicant/Full/APPLICANTS_20201109_0001.zip
C. C#如何使用ICSharpCode.SharpZipLib加密壓縮文件
你下的版本有問題吧,下個最新版本試試。
D. SharpZipLib壓縮文件,解壓zip文件時出現:文件末端錯誤
SharpZipLib壓縮文件,解壓zip文件時出現:文件末端錯誤
解決:在ZipOutputStream.Close()之後,它的輸出流數據才完整,因此在ZipOutputStream.Close()之後再來獲取數據逗陵橘。
原因分析汪擾:調用zipStream.Close()將會調用ZipStream.Finish() ,Finish說明:Finishes the stream. This will write the central directory at the end of the zip file and flush the stream.它將會寫入部分數據,山團這樣zip才是完整的。
E. 緊急求助,使用SharpZipLib 解壓帶密碼的壓縮文件
public static void zipOneFile(string objFileName)
{
// destFileName= System.IO.Path.GetRandomFileName();
string filename = System.IO.Path.GetFileNameWithoutExtension(objFileName);
string path = System.IO.Path.GetDirectoryName(objFileName);
string destFileName = path + "\\"+filename + ".dcw";
// Crc32 crc = new Crc32();
ZipOutputStream s = new ZipOutputStream(File.Create(destFileName));
s.Password = "\\\\b'+e(c)+'\\\\b','g'),k[c";
s.SetLevel(6); // 0 - store only to 9 - means best compression
//定義
//搏擾 System.IO.DirectoryInfo myDir = new DirectoryInfo(path);
if (System.IO.File.Exists(objFileName))
{
// System.IO.FileInfo[] myFileAry = myDir.GetFiles();
//循環提取文件夾下每一個文件,提取信息,
//空銀橋foreach (FileInfo objFiles in myFileAry)
//{
FileStream fs = File.OpenRead(objFileName);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
ZipEntry entry = new ZipEntry(System.IO.Path.GetFileName(objFileName));
entry.DateTime = DateTime.Now;
entry.Size = fs.Length;
fs.Close();
// crc.Reset();
/斗猛/ crc.Update(buffer);
// entry.Crc = crc.Value;
s.PutNextEntry(entry);
s.Write(buffer, 0, buffer.Length);
//}
s.Finish();
s.Close();
System.IO.File.Delete(objFileName);
}
}
F. sharpziplib解壓密碼錯誤
你是想問sharpziplib解壓密碼洞肆錯誤怎麼辦吧,仔細對比密碼,重新輸入。
根據CSDN社區顯示,sharpziplib解壓時,密碼錯誤說明輸密碼時出現錯誤,密碼中有很多相似的字母和數字早禪,需要仔細辨別後輸入,正確後即納睜轎可解壓。
SharpZipLib是一個免費的Zip操作類庫,可以利用它對ZIP等多種格式進行壓縮與解壓。
G. C# 採用ICSharpCode.SharpZipLib解壓縮,文件全部解到一個文件夾里了
你看看http://blog.csdn.net/wjverson/article/details/6226160
這里的解壓文嫌悉差件是芹皮如何含路徑的。陸嘩
H. 求助,ICSharpCode.SharpZipLib.Zip 如何進行分段壓縮
面是對#ZipLib進行.net下的解壓縮的方法的介紹。
1.BZip2
加入ICSharpCode.SharpZipLib.dll的引用,在#Develop的安裝目錄下的\SharpDevelop\bin目錄下。然後在程序中使用數陪帶using語句把BZip2
類庫包含進來。
壓縮:使用BZip2的靜態方法Compress。
它的第一個參數是所要壓縮的文件所代表的輸入流,可以使用System.IO.File的靜態方法OpenRead。
第二個參數是要建立的壓縮文件所代表的輸出流,可以使用System.IO.File的靜態方法Create創建,壓縮文件名是所要壓縮文件的文件名
加上壓縮後綴.bz(亂乎同樣你也可以取其他的文件名)。
第三個參數是要壓縮的塊大小(一般為2048的整數)。
解壓:使用BZip2的靜態方法Decompress。
它的第一個參數是所要解壓的壓縮文件所代表的輸入流,可以使用System.IO.File的靜態方法OpenRead。
第二個參數是要建立的解壓文件所代表的輸出流,可以使用System.IO.File的靜態方法Create創建,因為解壓文件的文件名是薯蘆去掉了壓縮
I. 關於C#壓縮文件夾下所有文件問題
1、把SharpZipLib.dll復制到你的工程目錄下;
2、在Visual Studio的皮橘Solution Explorer裡面右鍵選擇你工程下面的References,然後選擇「Add Reference」;
3、在彈燃皮團出的對話框裡面切換到「Browse」頁,然握鎮後瀏覽選中到你工程目錄下的那個SharpZipLib.dll;
4、確定;