示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }