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; }
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(); }