Подтвердить что ты не робот

С# создание файла с использованием memystream вместо textwriter

У меня есть приложение, которое в настоящее время создает текстовый файл для импорта в приложение учета. Для создания файла и записи строк используется следующий код:

    TextWriter tw = new StreamWriter(ExtractFileName);

    tw.WriteLine("ref\tACCOUNT\tbatch\tDEBIT\tCREDIT\tDesc");

Теперь мне нужно создать несколько файлов извлечения и спланировать их слияние в один .zip файл с помощью SharpZipLib (#ziplib) и изменить код для создания текстового файла "в памяти" и использовать его для создания моего zip файл. Я думаю, что я должен создавать/использовать MemoryStream, но не могу понять, как переносить существующий код.

Спасибо.

4b9b3361

Ответ 1

Вы можете сделать:

MemoryStream  memoryStream = new MemoryStream();
TextWriter tw = new StreamWriter(memoryStream);

tw.WriteLine("ref\tACCOUNT\tbatch\tDEBIT\tCREDIT\tDesc");

Ответ 2

Не создавайте ненужную абстракцию. Пока класс экспортера классный, он добавляет ценность только в том случае, если у вас более одной стратегии экспорта. В противном случае это беспорядок, который отвлекает от основной цели вашего кода.

Если вы хотите добавить экспортера, чтобы применить хорошую технику абстракции, которая прекрасна, но есть возможности бесконечной абстракции при написании значительного количества кода. Абстракция создает модульность и сводит код только, когда есть несколько реализаций определенного процесса или набора данных.

Ответ 3

Я также предлагаю, чтобы это было подходящее время, чтобы попытаться отделить части вашего приложения, чтобы вы могли изменить его части в будущем. Таким образом, TextWriter является хорошей абстракцией для записываемого потока, но также рассмотрим абстрагирование вашего класса экспорта.

например. теперь вы хотите сделать это следующим образом:

MemoryStream  memoryStream = new MemoryStream();
TextWriter tw = new StreamWriter(memoryStream);

// tab-delimited export
IExporter exporter = new DelimiterExport(data, tw, "\t"); 
exporter.Export();

чтобы вы могли легко изменить его на:

// csv file (stands for "comma separated value", but you should actually
// use a culture-specific list separator instead)
var separator = Thread.CurrentThread.CurrentCulture.TextInfo.ListSeparator;
IExporter exporter = new DelimiterExport(data, tw, separator);

или любой другой реализации:

// excel export
IExporter exporter = new ExcelExport(data, tw);

Предоставив независимый от протокола интерфейс, вы облегчите себе жизнь.