Beispiel #1
0
        // 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);
            }
        }
Beispiel #2
0
        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");
                    }
                }
            }
        }