Example #1
0
        private void extractWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            string[]    files;
            string      ext;
            string      directory = (string)e.Argument;
            int         count     = 0;
            int         percent;
            BlobFile    blobFile;
            Blob        blob;
            BlobContent content;

            byte[]            buffer;
            CfsFile           cfsFile;
            BackgroundWorker  worker  = (BackgroundWorker)sender;
            ExtractionResults results = new ExtractionResults();

            files = Directory.GetFiles(directory);
            foreach (string file in files)
            {
                count++;
                percent = (int)((count / (double)files.Length) * 100.0);


                ext = Path.GetExtension(file);
                if (!ext.Equals(".blo", StringComparison.CurrentCultureIgnoreCase) &&
                    !ext.Equals(".lvb", StringComparison.CurrentCultureIgnoreCase))
                {
                    continue;
                }

                try {
                    blobFile       = new BlobFile(file);
                    blob           = new Blob();
                    blob.Name      = Path.GetFileNameWithoutExtension(file);
                    blob.Path      = Path.GetDirectoryName(file);
                    blob.Version   = blobFile.Version;
                    blob.FileSize  = (int)new FileInfo(file).Length;
                    blob.Extention = Path.GetExtension(file);
                    results.AddBlob(blob);

                    foreach (BlobEntry entry in blobFile)
                    {
                        ext = Path.GetExtension(entry.Filename);
                        results.ContentCount++;

                        content      = new BlobContent();
                        content.Size = entry.Size;

                        if (ext.Equals(".cfs", StringComparison.CurrentCultureIgnoreCase))
                        {
                            content.Type = FileType.Cfs;
                            content.Name = Path.GetFileNameWithoutExtension(entry.Filename);
                            buffer       = blobFile.ExtractBytes(entry);

                            try {
                                //cfsFile = CfsFile.Read(buffer, 0, buffer.Length);
                                cfsFile = null;

                                if (cfsFile.Version == 3)
                                {
                                    results.CfsVersion3Files++;
                                }
                                else if (cfsFile.Version == 4)
                                {
                                    results.CfsVersion4Files++;
                                }
                                else // should never happen, but why not
                                {
                                    results.CfsVersionUnknownFiles++;
                                }
                            }
                            catch (Exception) {
                                results.CfsVersionUnknownFiles++;
                            }

                            blob.AddFile(content);
                        }
                        else if (ext.Equals(".wav", StringComparison.CurrentCultureIgnoreCase))
                        {
                            content.Type = FileType.Wav;
                            content.Name = Path.GetFileNameWithoutExtension(entry.Filename);
                            results.WavFiles++;

                            blob.AddFile(content);
                        }
                        else
                        {
                            results.UnknownFiles++;
                        }
                    }
                }
                catch (Exception) {
                }

                if (worker.WorkerSupportsCancellation && worker.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }

                worker.ReportProgress(percent, results);
            }

            worker.ReportProgress(100, results);
            e.Result = results;
        }
Example #2
0
        public static void Main(string[] args)
        {
            string   directory;
            BlobFile blobFile;
            CfsFile  cfsFile;
            int      blobFileSuccess;
            int      cfsFileSuccess;
            int      cfsTotal, blobTotal;

            string[] files;
            double   totalBlobTime, averageBlobTime;
            double   totalCfsTime, averageCfsTime;

            byte[]           buffer;
            string           ext;
            PerformanceTimer timer1 = new PerformanceTimer();

            //directory = @"C:\Program Files\Infantry";
            directory = @"C:\Users\Joel McBeth\Documents\Visual Studio 2008\Projects\MacroInfinity\Data";

            blobFileSuccess = 0;
            totalBlobTime   = 0;
            totalCfsTime    = 0;
            cfsFileSuccess  = 0;
            cfsTotal        = blobTotal = 0;
            files           = Directory.GetFiles(directory);
            foreach (string filename in files)
            {
                ext = Path.GetExtension(filename);
                if (!ext.Equals(".blo", StringComparison.CurrentCultureIgnoreCase) &&
                    !ext.Equals(".lvb", StringComparison.CurrentCultureIgnoreCase))
                {
                    continue;
                }

                blobTotal++;

                try
                {
                    timer1.Start();
                    blobFile = new BlobFile(filename);
                    timer1.Stop();

                    totalBlobTime += timer1.Duration;

                    foreach (BlobEntry entry in blobFile)
                    {
                        buffer = blobFile.ExtractBytes(entry);

                        try
                        {
                            ext = Path.GetExtension(entry.Filename);
                            if (ext.Equals(".cfs", StringComparison.CurrentCultureIgnoreCase))
                            {
                                cfsTotal++;

                                timer1.Start();
                                //cfsFile = CfsFile.Read(buffer, 0, buffer.Length);
                                cfsFile = null;
                                timer1.Stop();

                                totalCfsTime += timer1.Duration;

                                cfsFileSuccess++;
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("CFS File Exception\r\nFile:\t\t{0}\r\nBlob File:\t{1}\r\n{2}\r\n", entry.Filename, filename, ex.Message);
                        }
                    }

                    blobFileSuccess++;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Blob File Exception\r\nFile:\t\t{0}\r\n{1}", filename, ex.Message);
                }
            }

            averageBlobTime = totalBlobTime / (double)blobFileSuccess;
            averageCfsTime  = totalCfsTime / (double)cfsFileSuccess;

            Console.WriteLine("Blob File Results\r\nSuccessful:\t{0}\r\nTotal:\t\t{1}\r\nTotal Time:\t{2}\r\n" +
                              "Average Time:\t{3}\r\n",
                              blobFileSuccess, blobTotal, totalBlobTime, averageBlobTime);

            Console.WriteLine("CFS File Results\r\nSuccessful:\t{0}\r\nTotal:\t\t{1}\r\n" +
                              "Total Time:\t{2}\r\nAverage Time:\t{3}\r\n",
                              cfsFileSuccess, cfsTotal, totalCfsTime, averageCfsTime);
            Console.ReadKey();
        }