예제 #1
0
        public void Reset()
        {
            _source.Reset();

            // If this is a reset, ensure the old writer is Disposed (and flushes output)
            if (_writer != null)
            {
                _writer.Dispose();
                _writer = null;

                // On Dispose, tell the StreamProvider to publish the table
                _streamProvider.Publish(_outputFilePath);
            }
        }
예제 #2
0
        private static void Append(string inputFileOrFolderPath, string outputFilePath, string inputFileNamePattern = null)
        {
            string[] inputFilePaths;

            if (Directory.Exists(inputFileOrFolderPath))
            {
                if (String.IsNullOrEmpty(inputFileNamePattern))
                {
                    inputFileNamePattern = "*.*";
                }
                inputFilePaths = Directory.GetFiles(inputFileOrFolderPath, inputFileNamePattern);
            }
            else
            {
                inputFilePaths = new string[] { inputFileOrFolderPath };
            }

            ITabularWriter writer        = null;
            string         writerColumns = null;

            try
            {
                foreach (string inputFilePath in inputFilePaths)
                {
                    using (ITabularReader reader = TabularFactory.BuildReader(inputFilePath))
                    {
                        // Build the writer, if this is the first file
                        if (writer == null)
                        {
                            writer        = TabularFactory.AppendWriter(outputFilePath, reader.Columns);
                            writerColumns = String.Join(", ", reader.Columns);
                        }

                        // Validate columns match
                        string sourceColumns = String.Join(", ", reader.Columns);
                        if (string.Compare(writerColumns, sourceColumns, true) != 0)
                        {
                            throw new InvalidOperationException(string.Format("Can't append to \"{0}\" because the column names don't match.\r\nExpect: {1}\r\nActual: {2}", outputFilePath, writerColumns, sourceColumns));
                        }

                        // Copy the rows
                        CopyRows(reader, writer);

                        // Write a summary for this input file
                        Trace.WriteLine($" {inputFilePath}, {reader.RowCountRead:n0} rows; {reader.BytesRead.SizeString()}");
                    }
                }

                // Write a summary for the output file
                WriteSizeSummary(null, writer);
            }
            finally
            {
                if (writer != null)
                {
                    writer.Dispose();
                    writer = null;
                }
            }
        }
예제 #3
0
 public void Dispose()
 {
     if (_writer != null)
     {
         _writer.Dispose();
         _writer = null;
     }
 }