婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > .Net實現(xiàn)合并文件的具體方法

.Net實現(xiàn)合并文件的具體方法

熱門標(biāo)簽:五常地圖標(biāo)注 電銷語音自動機(jī)器人 萊蕪?fù)夂綦婁N機(jī)器人價格 地圖標(biāo)注和認(rèn)領(lǐng) 戶外地圖標(biāo)注軟件手機(jī)哪個好用 智能電話營銷外呼系統(tǒng) 鄭州400電話辦理 聯(lián)通 長春呼叫中心外呼系統(tǒng)哪家好 凱立德導(dǎo)航官網(wǎng)地圖標(biāo)注

以上列表中的文件并不是來自于某個文件夾中的所有jpg文件,而是來自于

這個文件。
將多個文件合并為一個文件在許多應(yīng)用領(lǐng)域都十分有用。親自實現(xiàn)這樣一個程序一定不但過癮且在許多時候可以幫助我們構(gòu)建更高效的程序。這里我做了一個方案例分享給大家。
由于合并后的文件就像一個包裹,所以下文中都把這樣的文件稱為“包文件”
主構(gòu)思:
要把多個文件合并成一個包文件,還要可以區(qū)分其中的某個文件并提取出來。我們需要知道文件的名稱和這個文件在包文件中的位置及長度,也就是所謂的地址偏移。
由于包文件常常會比較大,所以不應(yīng)該讓它的內(nèi)容常駐于內(nèi)存,只應(yīng)該需要某部分的時候再從包文件中提取。
我是這樣做的:

一個管理器類,提供一些外圍的方法
_pathList用于存放要添加到包文件的文件路徑,通過調(diào)用AddSourceFile()方法添加
_pf 是具體的包文件,通過LoadPackFile() 生成實例,通過CurrentPackFile屬性返回
Build方法用于生成包文件

PackFile類作為PackFileManager的嵌套類,它提供包文件的屬性和施工細(xì)節(jié)。
好了,我們先來看看PackFileManager.Build()方法

復(fù)制代碼 代碼如下:

           public void Build(string path)
        {
            using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
            {
                BinaryWriter bw = new BinaryWriter(fs);
                bw.Write("PackFile");
                bw.Write(this._pathList.Count);
                foreach (string f in this._pathList)
                {
                    FileInfo fi = new FileInfo(f);
                    bw.Write(fi.Length);
                    fi = null;
                }
                foreach (string f in this._pathList)
                {
                    bw.Write(Path.GetFileName(f));
                }
                foreach (string f in this._pathList)
                {
                    bw.Write(File.ReadAllBytes(f));
                    bw.Flush();
                }
            }
        }

1. 先寫個“PackFile”字符串到文件頭
2. 把以Int32為類型的,要輸出到包文件中的文件數(shù)量寫入
3. 把以long為類型的,要輸出到包文件中的每個文件的長度寫入。
4. 再把每個文件名寫入
5. 最后寫入每個文件的實體內(nèi)容。
由于在寫或讀時不頻繁在Write方法或ReadXXX方法的不同版本間頻繁切換,所以我想這樣組織文件結(jié)構(gòu)可以更高效一些。

疑問來了。在寫入文件名的時候,我們使用bw.Write(Path.GetFileName(f));
調(diào)用了BinaryWriter.Write(string value),傳入的是字符串,那么在讀取的時候要調(diào)用BinaryReader.ReadString()。這時它是如何區(qū)分兩個字符串邊界的。還好,Write方法會先將字符串長度作為一個四字節(jié)無符號整數(shù)寫入,于是在用BinaryReader.ReadString()的時候它會根據(jù)這個值來讀取特定長度的值,并理解為字符串。
這里列出幾個重要方法:

復(fù)制代碼 代碼如下:

PackFileManager的LoadPackFile方法
       public void LoadPackFile(string path)
        {
            if (!File.Exists(path))
            {
                throw new FileNotFoundException(path);
            }
            if (_pf != null)
            {
                _pf.Close();
                _pf = null;
            }
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            if (br.ReadString() != "PackFile")
            {
                throw new InvalidCoalescentFileException("該文件不是有效的包文件");
            }
            this._pf = new PackFile(fs,br);
        }

此時,我們在生成時寫入的字符串"PackFile" 就有了明確的功能
PackFile的構(gòu)造函數(shù)
復(fù)制代碼 代碼如下:

        internal PackFile(FileStream srcFile,BinaryReader br)
            {
                this._sourceFile = srcFile;
                _br = br;
                this._fileCount = _br.ReadInt32();//取文件數(shù)
                for (int i = 1; i = _fileCount; i++)
                {
                    this._fileLengthList.Add(_br.ReadInt64());
                }
                for (int i = 1; i = _fileCount; i++)
                {
                    this._shortNameList.Add(_br.ReadString());
                }
                this._contentStartPos = _sourceFile.Position;//設(shè)置實體文件總起始位置
            }
 

PackFile.GetBytes()
復(fù)制代碼 代碼如下:

            public byte[] GetBytes(int index)
            {
                long startPos = this._contentStartPos;
                for (int i = 0; i index; i++)
                {
                    startPos += this._fileLengthList[i];
                }
                _sourceFile.Position = startPos; //設(shè)置某文件內(nèi)容的起始位置
                return _br.ReadBytes((int)_fileLengthList[index]);
            }

這只是一個草案,我們還可以加入壓縮、或是像ZIP文件那樣的嵌套文件夾功能,改進(jìn)后的代碼別忘與我分享哦。

您可能感興趣的文章:
  • asp.net 合并GridView中某列相同信息的行(單元格)
  • asp.net 未能加載文件或程序集“XXX”或它的某一個依賴項。試圖加載格式不正確的程序。
  • asp.net中rdlc 合并行的方法
  • 未能加載文件或程序集“AspNetPager”或它的某一個依賴項。拒絕訪問
  • asp.net中GridView和DataGrid相同列合并實現(xiàn)代碼
  • ASP.NET GridView 實現(xiàn)課程表顯示(動態(tài)合并單元格)實現(xiàn)步驟
  • PowerShell入門教程之訪問.Net程序集、COM和WMI實例
  • SQL Server中調(diào)用C#類中的方法實例(使用.NET程序集)
  • 如何合并多個 .NET 程序集

標(biāo)簽:岳陽 衢州 宣城 湖州 西藏 紅河 福州 西寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《.Net實現(xiàn)合并文件的具體方法》,本文關(guān)鍵詞  .Net,實現(xiàn),合并,文件,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《.Net實現(xiàn)合并文件的具體方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于.Net實現(xiàn)合并文件的具體方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日精品一区二区三区| 极品尤物av久久免费看| www..com久久爱| 蜜桃91丨九色丨蝌蚪91桃色| 中文字幕一区在线观看视频| 777xxx欧美| 欧美日韩中字一区| 国产精品丝袜久久久久久app| 欧美丰满嫩嫩电影| 日韩欧美国产不卡| 亚洲精品一区二区三区精华液| 久久这里只精品最新地址| 久久久亚洲国产美女国产盗摄 | 欧美最新大片在线看| 国产一区二区精品久久| 九色综合国产一区二区三区| 六月丁香综合在线视频| 成人小视频免费观看| 成人精品小蝌蚪| 欧美怡红院视频| 日产国产欧美视频一区精品| 日日欢夜夜爽一区| 成人黄色国产精品网站大全在线免费观看 | 99久久精品国产观看| 欧洲一区二区av| 91精品国产一区二区三区香蕉| 日韩精品高清不卡| 国内不卡的二区三区中文字幕| 91在线精品一区二区三区| 精品福利一区二区三区| 中文字幕日韩av资源站| 国产精品自在在线| 91久久精品一区二区三区| 久久精品二区亚洲w码| 成人免费精品视频| 精品99久久久久久| 蜜臀av一级做a爰片久久| 91啪九色porn原创视频在线观看| 亚洲一区自拍偷拍| 亚洲激情第一区| 不卡的av电影| 亚洲同性同志一二三专区| 久久69国产一区二区蜜臀 | 欧美日韩一级片网站| 中文字幕日韩欧美一区二区三区| 激情文学综合网| 日韩一级二级三级| 精品久久久影院| 国产精品一区二区在线播放| 精品少妇一区二区三区日产乱码 | 成人动漫一区二区三区| 国产精品乱人伦| 不卡欧美aaaaa| 国产一区在线观看麻豆| 不卡电影免费在线播放一区| 国产精品久久99| 一本久久a久久精品亚洲| 亚洲一区av在线| 欧美mv和日韩mv的网站| 丁香一区二区三区| 亚洲影院免费观看| www国产精品av| 在线视频一区二区三| 黑人精品欧美一区二区蜜桃| 亚洲欧美一区二区不卡| 91精品国产福利| 中文一区二区在线观看| 国产精品国产三级国产三级人妇| 91福利区一区二区三区| 精品在线免费视频| 日韩高清在线不卡| 久久精品国产99久久6| 欧美日韩三级一区二区| 国模一区二区三区白浆| 亚洲人成影院在线观看| 欧美r级电影在线观看| 欧美日韩国产精品成人| 91在线视频网址| 精彩视频一区二区三区| 日韩av中文字幕一区二区| 一区二区三区成人| 一区2区3区在线看| 一区二区三区国产精品| 亚洲免费观看高清在线观看| 久久国产人妖系列| 午夜国产精品一区| 视频在线在亚洲| 蜜桃视频在线一区| 韩国一区二区视频| 国产精品一区免费在线观看| a在线播放不卡| 国产精品久久久久久亚洲毛片 | 欧美国产乱子伦| 自拍偷拍欧美精品| 国产精品家庭影院| 五月综合激情日本mⅴ| 精品一区二区影视| 高清在线不卡av| 欧美午夜精品久久久| 久久综合九色综合欧美98 | 久久综合久久综合九色| 日本一区二区免费在线 | 91蜜桃免费观看视频| 7777精品伊人久久久大香线蕉完整版 | 欧美日韩亚洲丝袜制服| 午夜精品一区二区三区电影天堂 | 久久99精品久久只有精品| 69堂亚洲精品首页| 欧美日韩精品一区视频| 亚洲国产成人91porn| 欧美特级限制片免费在线观看| 亚洲一区影音先锋| 在线播放国产精品二区一二区四区| 午夜精品福利视频网站| 日韩欧美www| 国产大陆a不卡| 日韩一区在线看| 欧美亚洲丝袜传媒另类| 青草av.久久免费一区| 91网址在线看| 亚洲国产成人av| 欧美精品一区二区精品网| 国产精品 欧美精品| 国产精品女同一区二区三区| 日本二三区不卡| 免费人成在线不卡| 久久久久久久一区| 色老汉一区二区三区| 视频一区国产视频| 国产色综合一区| 欧美亚洲动漫精品| 狠狠色狠狠色综合系列| 亚洲欧洲av色图| 欧美一区二区久久久| 成人免费av网站| 午夜精品在线视频一区| 国产成人在线电影| 亚洲va韩国va欧美va精品| 日韩一区二区三区视频| 从欧美一区二区三区| 午夜视频一区二区三区| 精品午夜久久福利影院| 亚洲天堂成人网| 精品免费日韩av| 91电影在线观看| 国产精品影视网| 日日摸夜夜添夜夜添国产精品| 中文字幕av资源一区| 欧美精品久久一区| 成人精品一区二区三区四区| 激情伊人五月天久久综合| 中文字幕一区二区在线观看| 欧美日韩你懂的| av欧美精品.com| 国产九九视频一区二区三区| 亚洲444eee在线观看| 日韩一区在线播放| 国产色产综合色产在线视频| 日韩一级黄色大片| 宅男在线国产精品| 欧美日韩一区二区三区在线看| 国产sm精品调教视频网站| 麻豆精品久久精品色综合| 亚洲一区二区三区视频在线| 日韩理论片中文av| 国产欧美一区二区精品仙草咪| 欧美色手机在线观看| 色先锋aa成人| 色综合久久久久| 91毛片在线观看| 色综合天天性综合| 91在线国内视频| 91丝袜美女网| 色婷婷激情一区二区三区| 高清国产午夜精品久久久久久| 国产一区激情在线| 国产欧美日韩精品在线| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩一级片网站| 久久奇米777| 亚洲r级在线视频| 激情成人综合网| 黑人精品欧美一区二区蜜桃 | 久久99热99| 亚洲午夜久久久久久久久电影网| 国产精品久久久久久久久动漫| 国产偷v国产偷v亚洲高清| 欧美大尺度电影在线| 日韩三级电影网址| 精品国产sm最大网站| 久久久久久影视| 中文字幕日韩一区二区| 一区二区三区四区av| 亚洲成a人在线观看| 日本成人在线视频网站| 国产真实乱偷精品视频免| 成人晚上爱看视频| 在线观看亚洲a| 91精品国产福利| 亚洲国产精品激情在线观看|