1. 程式人生 > >PCB 無需解壓,直接讀取Genesis TGZ指定文件 實現方法

PCB 無需解壓,直接讀取Genesis TGZ指定文件 實現方法

深度 通過 .text fault vat eps ring compress style

通過無需解壓讀取ZIP壓縮包的方法,尋思者如何可以不解壓直接讀Genesis TGZ文件內容,

通過查找資料,原來可以通過:SharpCompress.dll工具實現此需求,此工具如此NB

感謝互聯網無私奉獻的網友分享,在此之前一直想完成此功能,今天終於實現了。開心。。。

一.SharpCompress 讀取TGZ小結:

1.讀取TGZ內容,無法直接直接指定路徑讀取文件,只能通過MoveToNextEntry一個一個往下遍歷查找文件

2.MoveToNextEntry 遍歷文件,采用的是深度遞歸

3.區分文件名與文方件夾,無法通過Entry.IsDirectory 區分,識別方法:尾隨 / 斜桿為文件夾,否則為文件

二.通過寫實際例子來對此工具的用法進行說明這樣來得更實際一些。哈哈

例1:讀取TGZ STEP中有多少個step

        private string readTGZ_Dir()
        {
            string line = "";
            string tarFilePath = @"F:\2p00802ya0.tgz";
            string FileName = Path.GetFileNameWithoutExtension(tarFilePath);
            string FindDir = $@"
{FileName}/steps/"; //以/斜桿結尾為文件夾 using (Stream stream = File.OpenRead(tarFilePath)) { IReader reader = ReaderFactory.Open(stream); while (reader.MoveToNextEntry()) { Match matchresult = Regex.Match(reader.Entry.Key, $@"
^{FindDir}([\w\s]+)/$"); if (matchresult.Success) { line += matchresult.Groups[1].Value + " "; } } } return line; }

例2:讀取TGZ 指定standard字體內容

        private string readTGZ_File()
        {
            string line = "";
            string tarFilePath = @"F:\2p00802ya0.tgz";
            string FileName = Path.GetFileNameWithoutExtension(tarFilePath);
            string FindFile = $@"{FileName}/fonts/standard";
            using (Stream stream = File.OpenRead(tarFilePath))
            {
                IReader reader = ReaderFactory.Open(stream);
                while (reader.MoveToNextEntry())
                {
                    if (reader.Entry.Key == FindFile)
                    {
                        EntryStream st = reader.OpenEntryStream();
                        byte[] byData = new byte[reader.Entry.Size];
                        st.Read(byData, 0, byData.Length);
                        line = System.Text.Encoding.Default.GetString(byData);  //純英文讀取
                         //line = System.Text.Encoding.UTF8.GetString(byData);     //含中文讀取
                        st.Close();
                        break;
                    }
                }
            }
            return line;
        }

PCB 無需解壓,直接讀取Genesis TGZ指定文件 實現方法