我正在尋找一種方法將嵌入式資源添加到我的解決方案中。這些資源將是其中包含大量文件的文件夾。根據用戶需求,他們需要進行解壓縮。使用C#解壓縮tar文件
我正在尋找一種方法來存儲可執行文件中的這種文件夾,而不涉及第三方庫(看起來相當愚蠢,但這是任務)。
我發現,我可以使用標準庫進行GZip和UnGZip。但是GZip只處理單個文件。在這種情況下,TAR應該趕到現場。但是我還沒有在標準類中找到TAR的實現。
也許有可能使用裸C#解壓縮TAR?
我正在尋找一種方法將嵌入式資源添加到我的解決方案中。這些資源將是其中包含大量文件的文件夾。根據用戶需求,他們需要進行解壓縮。使用C#解壓縮tar文件
我正在尋找一種方法來存儲可執行文件中的這種文件夾,而不涉及第三方庫(看起來相當愚蠢,但這是任務)。
我發現,我可以使用標準庫進行GZip和UnGZip。但是GZip只處理單個文件。在這種情況下,TAR應該趕到現場。但是我還沒有在標準類中找到TAR的實現。
也許有可能使用裸C#解壓縮TAR?
由於您不允許使用外部庫,因此您不限於tar
文件的特定格式。事實上,他們甚至不需要它們都在同一個文件中。
您可以在C#中編寫自己的類tar實用程序來遍歷目錄樹,並生成兩個文件:一個「header」文件,包含一個映射到偏移量/長度對的序列化字典,以及一個大包含連接成一個巨型blob的單個文件內容的文件。這不是一項微不足道的任務,但也不是太複雜。
using (FileStream unarchFile = File.OpenRead(tarfile))
{
TarReader reader = new TarReader(unarchFile);
reader.ReadToEnd("out_dir");
}
有2種方式來壓縮/ .NET中解壓縮第一,你可以使用Gzipstream類DeflatStream雙方因此,如果你在壓縮的任何文件可以真正地在壓縮格式名爲.gz文件Gzipstream可以使用任何流行的壓縮應用程序打開,例如winzip/winrar,7zip,但是無法使用DeflatStream打開壓縮文件。這兩個類都來自.NET 2.
還有另一種方法是Package類,它實際上與Gzipstream和DeflatStream相同,唯一不同的是你可以壓縮多個文件,然後可以用winzip/winrar打開7zip。這就是所有的.NET。但它甚至不是通用的.zip文件, 它是微軟用來壓縮其* x擴展office文件的東西。如果您使用包類解壓縮任何docx文件,則可以看到存儲在其中的所有內容。所以不要使用.NET庫進行壓縮甚至解壓縮,因爲您甚至無法制作通用壓縮文件,甚至無法解壓縮通用壓縮文件。你必須考慮第三方庫,如 http://www.icsharpcode.net/OpenSource/SharpZipLib/
或實施一切從底樓。
Tar-cs會完成這項工作,但速度很慢。我會建議使用SharpCompress這是顯着更快。它還支持其他壓縮類型,並且最近已更新。
using System;
using System.IO;
using SharpCompress.Common;
using SharpCompress.Reader;
private static String directoryPath = @"C:\Temp";
public static void unTAR(String tarFilePath)
{
using (Stream stream = File.OpenRead(tarFilePath))
{
var reader = ReaderFactory.Open(stream);
while (reader.MoveToNextEntry())
{
if (!reader.Entry.IsDirectory)
{
reader.WriteEntryToDirectory(directoryPath, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite);
}
}
}
}