欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > .Net實現合并文件的具體方法

.Net實現合并文件的具體方法

熱門標簽:五常地圖標注 電銷語音自動機器人 萊蕪外呼電銷機器人價格 地圖標注和認領 戶外地圖標注軟件手機哪個好用 智能電話營銷外呼系統 鄭州400電話辦理 聯通 長春呼叫中心外呼系統哪家好 凱立德導航官網地圖標注

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

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

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

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

復制代碼 代碼如下:

           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為類型的,要輸出到包文件中的文件數量寫入
3. 把以long為類型的,要輸出到包文件中的每個文件的長度寫入。
4. 再把每個文件名寫入
5. 最后寫入每個文件的實體內容。
由于在寫或讀時不頻繁在Write方法或ReadXXX方法的不同版本間頻繁切換,所以我想這樣組織文件結構可以更高效一些。

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

復制代碼 代碼如下:

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的構造函數
復制代碼 代碼如下:

        internal PackFile(FileStream srcFile,BinaryReader br)
            {
                this._sourceFile = srcFile;
                _br = br;
                this._fileCount = _br.ReadInt32();//取文件數
                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;//設置實體文件總起始位置
            }
 

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

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

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

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

標簽:岳陽 衢州 宣城 湖州 西藏 紅河 福州 西寧

巨人網絡通訊聲明:本文標題《.Net實現合并文件的具體方法》,本文關鍵詞  .Net,實現,合并,文件,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《.Net實現合并文件的具體方法》相關的同類信息!
  • 本頁收集關于.Net實現合并文件的具體方法的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    日韩在线不卡av| 亚洲欧美中日韩| 婷婷中文字幕综合| 麻豆传媒在线看| 色av一区二区| 亚洲视频在线观看一区| 成人国产精品免费| 国产大学生自拍| 亚洲欧美中日韩| 成人国产电影网| 色欧美日韩亚洲| 亚洲男人天堂一区| 亚洲天堂小视频| 欧美日韩电影在线| 五月综合激情网| 一区二区视频观看| 精品久久人人做人人爽| 久久97超碰色| 亚洲欧美va天堂人熟伦| 国产亚洲女人久久久久毛片| 韩国av一区二区| 999福利视频| 中文字幕一区二区三区不卡| www.爱久久.com| 在线精品观看国产| 亚洲成人1区2区| 好吊一区二区三区视频| xf在线a精品一区二区视频网站| 久久精品国产在热久久| 日本 欧美 国产| 亚洲手机成人高清视频| 欧美xxxxx少妇| 欧美r级电影在线观看| 国产美女视频91| 在线免费观看亚洲视频| 亚洲综合久久久久| 亚洲最大免费视频| 久久久不卡网国产精品一区| 国产91丝袜在线18| 欧美在线观看视频在线| 丝袜美腿成人在线| 最新中文字幕av| 亚洲视频一区在线| 最近日本中文字幕| 国产拍欧美日韩视频二区| 99久久免费视频.com| 欧美久久一二三四区| 久久超碰97中文字幕| 日韩一级片av| 午夜激情一区二区三区| 亚洲色图 激情小说| 亚洲色图第一区| 中文字幕免费在线播放| 国产日韩欧美不卡| 一区二区三区人妻| 久久久久久久久岛国免费| 不卡av在线网| 欧美一区二区成人6969| 国产成人综合精品三级| 欧美日韩精品欧美日韩精品一| 美女国产一区二区三区| 色综合色综合色综合| 午夜久久久久久| 国产三级精品三级观看| 亚洲一区二区视频| 懂色av粉嫩av浪潮av| 亚洲综合色自拍一区| 久久久久久久毛片| 亚洲精品乱码久久久久久久久| 少妇按摩一区二区三区| 亚洲欧美一区二区久久| 久久国产精品影院| 一区二区三区久久| 国产农村妇女精品一区| 亚洲高清久久久| 97在线观看视频免费| 午夜精品一区二区三区电影天堂| 天堂资源在线视频| 午夜激情久久久| 色国产综合视频| 极品少妇xxxx精品少妇偷拍| 欧美视频在线一区二区三区 | www成人啪啪18软件| 亚洲一区二区在线播放相泽| 成人欧美一区二区三区黑人一| 性欧美疯狂xxxxbbbb| 日本福利片在线观看| 日本亚洲免费观看| 欧美在线免费播放| 成人丝袜18视频在线观看| 精品国产制服丝袜高跟| 97精品人人妻人人| 亚洲色图欧洲色图| 性生交大片免费全黄| 久久99最新地址| 欧美精品自拍偷拍动漫精品| 不卡视频在线看| 国产日韩精品一区二区三区| 手机在线看片日韩| 亚洲一区免费在线观看| 在线免费日韩av| 国产美女久久久久| 精品国产凹凸成av人网站| 91超薄肉色丝袜交足高跟凉鞋| 亚洲视频一二三区| 中文字幕资源站| 精品一区二区在线看| 日韩午夜精品视频| 成年人小视频在线观看| 亚洲最新视频在线播放| 色综合久久久久综合体| 国产成人综合亚洲网站| 久久精品人人做| 美国黑人一级大黄| 久久国产三级精品| 欧美不卡在线视频| 国产中文字幕一区二区| 视频一区二区三区在线| 欧美日韩电影在线播放| 日韩黄色一区二区| 一区二区在线观看不卡| 91福利在线观看| 99re66热这里只有精品3直播 | 亚洲成人高清在线| 欧美三级韩国三级日本一级| 不卡视频一二三| 亚洲欧美日韩国产成人精品影院| 丰满少妇高潮久久三区| 成人精品免费网站| 中文字幕在线不卡国产视频| 乱h高h女3p含苞待放| 成人黄色777网| 亚洲免费av在线| 欧美视频中文一区二区三区在线观看| 欧美人与性动交α欧美精品| 亚洲综合色噜噜狠狠| 欧美精品亚洲二区| 在线观看国产三级| 久久99精品网久久| 国产日韩欧美精品一区| 紧身裙女教师波多野结衣| 不卡高清视频专区| 亚洲综合一区二区精品导航| 欧美日韩精品专区| 日本黄色免费观看| 久久av资源网| 国产精品狼人久久影院观看方式| 一本久久a久久精品亚洲| 精品人妻一区二区三| 一区二区三国产精华液| 欧美高清精品3d| 一级性生活毛片| 国产高清不卡一区二区| 亚洲色图另类专区| 9191成人精品久久| 日韩乱码人妻无码中文字幕久久| 国产在线不卡一卡二卡三卡四卡| 欧美激情中文字幕| 色www精品视频在线观看| 日本道中文字幕| 捆绑调教美女网站视频一区| 欧美激情在线看| 在线欧美一区二区| 波多野结衣影院| 国产一区二区精品久久91| 日韩理论片一区二区| 欧美高清激情brazzers| 性の欲びの女javhd| av电影一区二区| 五月婷婷欧美视频| 久久久91精品国产一区二区精品| 婷婷色中文字幕| 亚洲高清无码久久| 国产在线不卡视频| 夜夜精品视频一区二区| 2021中文字幕一区亚洲| 色狠狠一区二区| jizz日本免费| 国产91对白在线观看九色| 亚洲国产aⅴ成人精品无吗| 久久久久97国产精华液好用吗| 91成人国产精品| xxx在线播放| 91性感美女视频| 蜜桃av一区二区在线观看| 亚洲欧洲一区二区在线播放| 3d动漫精品啪啪| 2014亚洲天堂| 一级国产黄色片| 99久久久精品| 老司机精品视频线观看86 | av在线播放中文字幕| 一个人看的视频www| 精品亚洲成a人| 亚洲最大成人网4388xx| 久久精品网站免费观看| 欧美日本一区二区| 免费在线观看黄色小视频| 免费日本黄色网址| 97超碰欧美中文字幕|