Программирование >>  Программирование с использованием ajax 

1 ... 248 249 250 [ 251 ] 252 253 254 ... 396


легко комбинировать с приемами доступа к данным, которые будут показаны в последующих главах, и это значит, что данными, полученными из файла CSV, можно манипулировать так же, как и любыми другими источниками данных (такими, как базы данных). Однако из файла CSV не извлекается никакой информации о типах данных. В настоящее время все данные трактуются как строки. Для бизнес-приложения масштаба предприятия следует выполнить дополнительный шаг добавления информации о типе к извлекаемым данным. В зависимости от конкретного приложения, это может поступать из дополнительной информации, хранимой в файле CSV, конфигурироваться вручную или же выводиться из строк файла.

Даже несмотря на то, что XML, описанный в следующей главе - это превосходный метод хранения и транспортировки данных, файлы CSV все еще достаточно распространены, и останутся таковыми еще долгое время. Файлы, хранящие данные, разделенные запятыми, весьма лаконичны, и потому они меньше, чем их XML-аналоги.

Чтение и запись сжатых файлов

Часто при работе с файлами требуется значительное пространство на жестком диске. Это особенно верно для графических и звуковых файлов. Вероятно, вам встречались утилиты, позволяющие сжимать и распаковывать файлы, что удобно для их передачи по электронной почте. Пространство имен System. 10.Compression содержит классы, позволяющие сжимать файлы из кода с использованием алгоритма GZIP или Deflate - оба они общедоступны для любого применения.

Однако при работе со сжатыми файлами есть еще кое-что помимо собственно сжатия. Коммерческие приложения позволяют множеству файлов размещаться в единственном сжатом файле и т.п. То, что вы увидите в настоящем разделе, много проще: сохранение текстовых данных в сжатом файле. Вряд ли удастся манипулировать этим файлов с помощью внешней утилиты, но этот файл будет намного меньше, чем его несжатый эквивалент!

Два класса сжимающих потоков из пространства имен System. 10.Compression, которые здесь рассматриваются - DeflateStream и GZipStream- работают очень похоже. В обоих случаях они инициализируются существующим потоком, которым в случае файлов является объект FileStream. После этого их можно использовать вместе с StreamReader и StreamWriter, как и любой другой поток. Все, что потребуется специфицировать в дополнение - будет ли поток использоваться для сжатия (сохранения файлов) или распаковки (загрузки файлов), чтобы класс знал, что делать с переданными ему данными. Хорошая иллюстрация предлагается в следующем практическом занятии.

Сжатые данные

Создайте новое консольное приложение по имени Compressor и сохраните его в каталоге С: \BegVCSharp\Chapter24.

Поместите следующие строки кода в начало Program.cs. Вы должны импортировать пространство имен System.lO для работы с файлами, и System. 10.Compression для использования сжимающих классов:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.lO;

using System. 10. Congress ion;



3. Добавьте следующие методы в тело Program, cs перед методом Main (): static void SaveCompressedFile(string filename, string data)

FileStream fileStream =

new FileStream(filename, FileMode.Create, FileAccess.Write); GZipStream compressionStream =

new GZipStream(fileStream, CompressionMode.Compress); StreamWriter writer = new StreamWriter(compressionStream); writer.Write(data) ; writer.Close() ;

static string LoadCompressedFile(string filename) {

FileStream fileStream =

new FileStream(filename, FileMode.Open, FileAccess.Read); GZipStream compressionStream =

new GZipStream(fileStream, CompressionMode.Decompress); StreamReader reader = new StreamReader(compressionStream); string data = reader.ReadToEnd(); reader.Close(); return data;

4. Добавьте следующий код в метод Main (): static void Main(string [ ] args)

string filename = compressedFile.txt ;

Console.WriteLine(

Enter a string to compress (will be repeated 100 times): ); Console.WriteLine(

Введите строку для сжатия (она будет повторена 100 раз): );

string sourceString = Console.ReadLine(); StringBuilder sourceStringMultiplier =

new StringBuilder(sourceString.Length * 100); for (int i = 0; i < 100; i++) {

sourceStringMultiplier.Append(sourceString);

sourceString = sourceStringMultiplier.ToString();

Console.WriteLine( Source data is {0} bytes long. , sourceString.Length); Console.WriteLine( Исходные данные имеют длину {0} байт. , sourceString.Length);

SaveCompressedFile(filename, sourceString);

Console.WriteLine( \nData saved to {0}. , filename);

Console.WriteLine( ХпДаные сохранены в {0}. , filename);

Filelnfo compressedFileData = new Filelnfo(filename);

Console.WriteLine( Compressed file is {0} bytes long. ,

compressedFileData.Length); Console.WriteLine( Сжатый файл имеют длину {0} байт. , compressedFileData.Length);

string recoveredString = LoadCompressedFile(filename);

recoveredString = recoveredString.Substring(0, recoveredString.Length / 100);



Console.WriteLine( \nRecovered data: {0} , recoveredString);

Console.WriteLine( ХпИзвлеченные данные: {0} , recoveredString);

Console.ReadKey О;

catch (lOException ex) {

Console.WriteLine( An 10 exception has been thrown! ); исключение

ввода-вывода

Console.WriteLine(ex.ToString()); Console.ReadKey 0;

5. Запустите приложение и введите достаточно длинную строку. Пример результата показан на рис. 24.7.


Рис. 24.7. Результат работы приложения Compressor

6. Откройте файл compressedFile. txt в Notepad. Содержимое этого файла показано на рис. 24.8.

compressMlFile Notepad

Formal View

a J tVj. i-%A/mC{JbJxaT iS0©+ia IapiiG#;<-Ceve]fIi4-P{iy,-P {T)V-o;N by-?\fd lolJUE5.-:*e- r-Plb )o <l-4t51]u< .-e4I§ce-тОУиимЫЕОи-гй %dm[* jYM(?KjuvOn>J[iy.e-eO)i p tufKnve01 h; OmMyiTKn(50Evu Z 10o*f (mKiI- Ell* au#CE n7 пОфСАйс ч-АпОМ

nOtDu<hhL(#a ni (iDa<iu#iitDbu#voa<iio-aiLityDavly >tA0(jiyuA0G4fD*€> A0<;/-t lnOt:.*€-lt)4 iOdu< hu#ti ni (iDaau*tI)Dbu#-yaiaiJoU0GiyaiYtty t AeGiyuA0G4D .Cy#A a7 E

Puc. 24.8. Содержимое файла compressedFile. txt

Описание полученных результатов

в этом примере были определены два метода для сохранения и загрузки сжатого текстового файла. Первый из них - SaveCompressedFile () - выглядит так:

static void SaveCompressedFile (string filename, string data) {

FileStream fileStream =

new FileStream(filename, FileMode.Create, FileAccess.Write); GZipStream compressionStream =

new GZipStream(fileStream, CompressionMode.Compress); StreamWriter writer = new StreamWriter(compressionStream); writer.Write(data); writer.Close();



1 ... 248 249 250 [ 251 ] 252 253 254 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика