public void OpenFiles(string[] fileNames) { var fileList = new List <string>(fileNames); var documentWindows = MdiChildren.OfType <DocumentWindow>(); for (int i = 0; i < fileList.Count; ++i) { var fileName = fileList[i]; var extension = Path.GetExtension(fileName).ToLowerInvariant(); var existingWindow = documentWindows.FirstOrDefault( dw => dw.FileName == fileName); if (existingWindow != null) { existingWindow.Activate(); fileList.RemoveAt(i); --i; } if (extension == ".2da" && Settings.Default.AutoLoad2DA) { var schema = TwoDASchemaRegistry.GetMatchingSchema(Path.GetFileName(fileName)); if (schema != null && schema.Columns != null) { foreach (var schemaColumn in schema.Columns) { var rowSource = schemaColumn.RowSource; if (rowSource != null) { if (!documentWindows.Any(dw => Path.GetFileName(dw.FileName) == rowSource) && !fileList.Any(f => Path.GetFileName(f) == rowSource)) { string rowSourceFileName = Path.Combine( Path.GetDirectoryName(fileName), rowSource); if (!File.Exists(rowSourceFileName) && Directory.Exists(Settings.Default.TwoDAPath)) { rowSourceFileName = Path.Combine(Settings.Default.TwoDAPath, rowSource); } if (File.Exists(rowSourceFileName)) { fileList.Insert(0, rowSourceFileName); ++i; } } } } } } } openFilesBackgroundWorker.RunWorkerAsync(fileList); }
private TwoDADocument LoadTwoDADocument(string fileName) { var schema = TwoDASchemaRegistry.GetMatchingSchema(Path.GetFileName(fileName)); int lineCount = 0; var buffer = new MemoryStream(); using (var reader = new StreamReader(fileName)) { var writer = new StreamWriter(buffer); string line; while ((line = reader.ReadLine()) != null) { writer.WriteLine(line); ++lineCount; } writer.Flush(); } buffer.Position = 0; using (var reader = new StreamReader(buffer)) { var doc = new TwoDADocument(schema); doc.Load( reader, lineNumber => { if (lineNumber % 100 == 0) { openFilesBackgroundWorker.ReportProgress( (int)Math.Round(lineNumber * 100m / lineCount), new OpenFileProgressState { FileName = fileName, Document = null }); } }); return(doc); } }