// TAHファイルを作成する private static void CreateTahFileList() { // ファイル名の一覧を作る. List <string> filenamelist = new List <string>(); foreach (uint hash in hashtable) { filenamelist.Add(filemaps[hash]); } // 4GBずつリストを分割する List <string> tahfilelist = new List <string>(); tahfilelists.Add(tahfilelist); long filesize = 0; foreach (string file in filenamelist) { TAHEntryInfo info = GetEntry(file); filesize = filesize + info.entry.Length; if (filesize > FileLimit) { filesize = info.entry.Length; tahfilelist = new List <string>(); tahfilelists.Add(tahfilelist); } tahfilelist.Add(file); } }
private static void CreateTahFiles(string tahname, uint version) { string basefilename = Path.GetFileNameWithoutExtension(tahname); int count = 0; foreach (List <string> tahfilelist in tahfilelists) { if (tahfilelist.Count > 0) { string destname; if (count == 0) { destname = tahname; } else { tahname = Path.Combine(Path.GetDirectoryName(tahname), basefilename + "-" + count.ToString() + ".tah"); } count++; TAHWriter writer = new TAHWriter(); writer.Version = version; foreach (string file in tahfilelist) { writer.Add(file); } Console.WriteLine("tah file " + tahname); using (FileStream fs = File.OpenWrite(tahname)) { int filecount = 1, filemax = tahfilelist.Count; // データ取得delegate writer.RawData += delegate(string filename) { TAHRawData rawdata = new TAHRawData(); TAHEntryInfo fileinfo = GetEntry(filename); TAHFile tahfile = fileinfo.file; uint length; rawdata.data = TAHUtil.ReadRawEntryData(tahfile.Reader, fileinfo.entry, out length); rawdata.length = length; //Console.Write(tahname + " " + filecount++.ToString() + "/" + filemax.ToString() + "\r"); return(rawdata); }; writer.RawWrite(fs); Console.Write("\n"); } } } }