c 自己製作類似winrar的打包程式(1)

2022-02-03 02:45:09 字數 3300 閱讀 5672

利用了以下外掛程式:

/*

icsharpcode.sharpziplib

libzplay

*/

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.io;

using system.runtime.serialization.formatters.binary;

namespace dstfs

#endregion 新增檔案

#region 建立新檔案

/// /// 建立乙個新檔案

///

/// 要建立的檔案完整路徑

public void build(string path)

foreach (string f in this._pathlist)

foreach (string f in this._pathlist)}}

#endregion 建立新檔案

#region 讀取檔案

/// /// 讀取檔案

///

/// 要讀取的檔案的完整路徑

public void loadpackfile(string path)

if (_pf != null)

filestream fs = new filestream(path, filemode.open, fileaccess.read);

binaryreader br = new binaryreader(fs);

if (br.readstring() != "dst_packfile_v1")

this._pf = new packfile(fs, br);

}#endregion 讀取檔案

#region properties

/// /// properties

///

public packfile currentpackfile

}#endregion properties

}/// /// 檔案部分

///

public class packfile

for (int i = 1; i <= _filecount; i++)

this._contentstartpos = _sourcefile.position;//設定實體檔案內容的起始位置

}public memorystream getstream(int index)

public byte getbytes(int index)

_sourcefile.position = startpos;

return _br.readbytes((int)_filelengthlist[index]);

}public void outputalltodirectory(string dir)

for (int i = 0; i < _filecount; i++)

}/// /// 以新名字輸出某個內容到檔案

///

///

///

public void outputonetofile(int index, string file)

/// /// 用源檔名輸出某個內容到指定資料夾

///

///

///

public void outputonetodirectory(int index, string dir)

internal void close()

}#region 屬性

//源包檔案

public string currentpackfile

}public int filecount

}public string namelist

}#endregion

}public class invalidcoalescentfileexception : exception

}}

好了,我們就可以用這個結構來創造自己獨特的檔案格式了。

現在我們新建乙個專案,引用這個類,首先在全域性宣告乙個物件:

dstpackfile.dstpf dst = new dstpackfile.dstpf();

用以下**建立乙個檔案:

dst.addsourcefile("1.ogg");

dst.build(textbox3.text);

//新增多個檔案的話需要多次新增sourcefile,最後執行build。

dstpackfile.dstpf dst = new dstpackfile.dstpf();

dst.loadpackfile("c:\\1.dst");

var cf = dst.currentpackfile;

var ms = dst.currentpackfile.getstream(0);

//我想把這個方法增加乙個過載,不用數字編號了,直接用檔名就類似getstream("1.ogg")一樣,還在努力實現中....

libzplay.zplay player = new zplay();

long numbytes = ms.length;

system.io.binaryreader br = new system.io.binaryreader(ms);

byte stream_data = null;

stream_data = br.readbytes(system.convert.toint32((int)(numbytes)));

if (!(player.openstream(true, false, ref stream_data, system.convert.touint32(numbytes), tstreamformat.sfogg)))

player.startplayback();

br.close();

好了,我們就能聽到**了。

到現在我有乙個設想:

1.這個檔案結構只是最簡單的,我想它不光能打包檔案,還能把資料夾打包進去。

2.能用流的方式讀出包檔案裡的東西,而且不需要太大的記憶體。

3.能實現壓縮功能(在不借助第三方外掛程式),把聲音、等等的檔案有單獨的壓縮演算法,並且解壓的時候不是很費時。

4.。。。。。。。。

其實還有好多....只是現在想不起來了,等有新進展再接著寫。要是各位大牛有神馬批評、指導。請pm我~~

xsl,xsd,xml製作的類似html的個人簡歷

個人簡歷 姓名 性別 生日 email 簡歷 開始時間 終止時間 所在單位 證明人 年月日 年 月 日技術專長 專案經驗 簡歷列表 xmlns xsi xsi schemalocation intromyself.xsd 簡歷詳細 姓名 姓 李yaerfeng1989 163.com 效果圖...

製作自己的c函式庫

ifndef my func h define my func h 判斷閏年還是平年 閏年則返回1 intd isleapyear int year 判斷乙個數是否是素數 intd isprimenum int num 求圓面積,引數和返回值為浮點型 double d computearea dou...

Flex Flash製作類似桌面歌詞的可配置廣告牌

相對flash來說flex的動畫功能還是比較弱的,flash的動畫基於幀 時間軸等概念,而flex的動畫則基於flex內部的特效,使用麻煩而且有時候還達不到想要的效果。筆者試過在flex中使用flash同樣的指令碼建立乙個跑馬燈動畫,居然能把程式卡死 下面結合專案中的實際例子講一下flash和fle...