コード例 #1
0
        void CheckGMFileValidity(object o)
        {
            ValidityThreadArgs vta = (ValidityThreadArgs)o;
            string             dir = vta.dir;

            string[] allFiles = Directory.GetFiles(dir);
            int      numFiles = allFiles.Length;
            WaitDlg  dlg      = vta.dlg;

            dlg.UpdateStatus("Checking {0} files", numFiles);
            int exceptions = 0;

            for (int i = 0; i < numFiles; ++i)
            {
                Box.ResetIndexCount();
                string currentFile           = allFiles[i];
                GTMP.GMFile.GMFileInfo fi    = GTMP.GMFile.Parse(currentFile);
                List <IBox>            boxes = ConvertGMFileBoxes(fi.Boxes);

                try
                {
                    MemoryStream ms = new MemoryStream(boxes.Count * 0x4c);
                    using (BinaryWriter bw = new BinaryWriter(ms))
                    {
                        foreach (IBox b in boxes)
                        {
                            b.Serialize(bw);
                        }
                    }
                }
                catch (InvalidBoxStateException ibse)
                {
                    if (++exceptions == 50)
                    {
                        break;
                    }
                    DebugLogger.Log("Debug", "Exception was from {0}", currentFile);
                    dlg.UpdateStatus("Caught invalid box exception {0} for {1} in file {2}", ibse.Message, ibse.InvalidBox.Name, currentFile);
                }

                if ((i != 0) && ((i % 10) == 0))
                {
                    dlg.UpdateStatus(String.Format("Tested {0} files", i));
                }
            }
            dlg.AllowClose("All checked");
        }
コード例 #2
0
        void checkGameFileValidity_Click(object sender, EventArgs e)
        {
            //string dir = PickFolder(this, "Open dir with GM files");
            string dir = @"T:\gt2\gtmenu\pics\GTMenuDatDecomp";

            if (!String.IsNullOrEmpty(dir))
            {
                using (WaitDlg dlg = new WaitDlg("Checking GM Files"))
                {
                    ValidityThreadArgs vta = new ValidityThreadArgs();
                    vta.dlg = dlg;
                    vta.dir = dir;
                    System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(CheckGMFileValidity), vta);
                    dlg.ShowDialog(this);
                }
            }
        }