利用了以下外掛程式:
/*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...