|
Программирование >> Программирование с использованием ajax
легко комбинировать с приемами доступа к данным, которые будут показаны в последующих главах, и это значит, что данными, полученными из файла 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();
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |