//Copyright(C) 2009 にょろ. All rights reserved. #region usingディレクトリ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; #endregion namespace FileUnite { class FileUnite { #region 変数,プロパティ #region private 変数,プロパティ #endregion #region protected 変数,プロパティ #endregion #region public 変数,プロパティ public List Files { get; private set; } public List Names; #endregion #endregion #region コンストラクタ public FileUnite() { Files = new List(); Names = new List(); } #endregion #region メンバ #region private メンバ #endregion #region public メンバ public void Add(string s,FileStream fs) { Files.Add(fs); int i = s.LastIndexOf("\\"); if (i != -1) s = s.Substring(i + 1, s.Length - i - 1); Names.Add(s); } public void Add(string s) { Add(s, new FileStream(s, FileMode.Open, FileAccess.Read)); } public FileStream Unite(string s,long seed) { FileStream[] fss = Files.ToArray(); BinaryReader[] brs=new BinaryReader[fss.Length]; for (int i = 0; i < brs.Length; i++) { brs[i] = new BinaryReader(fss[i]); } FileStream output=new FileStream(s,FileMode.Create,FileAccess.Write); //StreamWriter sw = new StreamWriter(output); BinaryWriter br = new BinaryWriter(output); br.Write(seed);//seed1入れる br.Write(fss.Length);//ファイル数入れる MRandom rnd = new MRandom(seed); long[] sizel=new long[fss.Length]; for (int i = 0; i < Names.Count; i++) { br.Write(Names[i]); //ファイルの大きさを取得 sizel[i] = fss[i].Length; br.Write(sizel[i]);//書き込み } byte b; for (int i = 0; i < fss.Length; i++) { for (int j = 0; j < fss[i].Length; j++) { b = (byte)(brs[i].ReadByte() ^ rnd.BNext()); br.Write(b); } } for (int i = 0; i < fss.Length; i++) { fss[i].Close(); } Console.WriteLine("OK:{0}", s); return output; } #endregion #region protected メンバ #endregion #endregion #region オーバーラド メンバ #endregion } }