Главная » Просмотр файлов » 1629295403-b876e2087bddebea4bc9666fb2377a02

1629295403-b876e2087bddebea4bc9666fb2377a02 (846199), страница 87

Файл №846199 1629295403-b876e2087bddebea4bc9666fb2377a02 (С для чайников) 87 страница1629295403-b876e2087bddebea4bc9666fb2377a02 (846199) страница 872021-08-18СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 87)

Работа с файлами и библиотеками441{// Чтение по одной строкеwhile(true){// Считывание строкиstring slnput = sr.ReadLine() ;// Выход, когда больше считатьif (slnput == null)строку не удается{break;}// Вывод считанного на консольConsole.WriteLine(slnput);}catch(IOExceptionfe)// перехватывает все ошибки и сообщает о нихConsole.Write(fe.Message);// Закрываем файлtry(игнорируя возможныеошибки)sr.Close();catch {}sr = null;// Ожидаем подтверждения пользователяConsole.WriteLine("Нажмите <Enter> для " +"завершения программы.. .

") ;Console.Read();}Вспомним, что текущим каталогом, использовавшимся демонстрационной програм­мой FileRead, был подкаталог \bin\Debug в каталоге проекта FileRead (но не ка­талог \bin\Debug в каталоге проекта FileWrite). Перед тем как вы запустите про­грамму FileRead, поместите текстовый файл в подкаталог \bin\Debug каталогампроекта и запомните имя этого файла, чтобы впоследствии вы могли открыть его. Длиэтого вполне подойдет копия файла TestFilel.txt, созданного демонстрационно!программой FileWrite.Демонстрационная программа FileRead применяет другой подход к именам фай­лов. В ней пользователь считывает один и только один файл.

Пользователь должен вве­сти корректное имя файла, который будет считан программой. После того как программапрочтет файл, она завершает свою работу. Если пользователь хочет прочесть второйфайл, он должен заново запустить программу.Одно из ограничений подхода, использованного в демонстрационной программе Fil­eRead, заключается в том, что попытки получить имя файла от пользователя продолжают­ся до бесконечности.

Если пользователь ошибается, он должен продолжать свои попытки.Единственный выход из программы без ввода корректного имени — воспользоваться ком­бинацией клавиш <Ctrl+C> либо щелкнуть на кнопке закрытия консольного окна.442Часть VII. Дополнительные главаПрограмма начинается с цикла while, как и демонстрационная программа FileWrite. В цикле программа получает имя файла для чтения от пользователя.

Если имяфайла пустое, программа генерирует свое собственное сообщение об ошибке: Введенопустое и м я файла. Если имя файла не пустое, оно используется для открытия объек­та FileStream в режиме для чтения. Вызов File.Open() работает так же, как ив демонстрационной программе FileWrite.Первый аргумент — это имя файла.Второй а р г у м е н т — режим открытия файла. Режим FileMode. Open гласит:"Открыть файл, если он существует, и сгенерировать исключение, если его нет".Другой в а р и а н т — OpenNew, который создает файл нулевой длины в случае от­сутствия последнего.

Лично я никогда не использовал этот режим (кому надо чи­тать из пустого файла?), но мало ли — может, имеются люди, умеющие напитьсяиз пустого стакана?Последний аргумент указывает на желание читать из объекта FileStream. Дру­гие возможные варианты — Write и ReadWrite. (Кажется странным открыватьфайл в программе FileRead с использованием режима Write, не правда ли?)Полученный в результате объект f s класса FileStream оборачивается в объект srкласса StreamReader — для предоставления удобного доступа к текстовому файлу.Весь раздел открытия файла размещен в try-блоке в цикле while.

Этот try-блокпредназначен исключительно для открытия файла. Если в процессе открытия файла про­исходит ошибка, генерируется и перехватывается исключение, выводится сообщение обошибке, и программа возвращается к запросу имени файла. Однако если процесс завер­шается благополучно, то команда break передает управление за пределы цикла в разделчтения файла.Демонстрационные программы FileRead и FileWrite представляют дваразных способа обработки исключений. Вы можете поместить всю программув один try-блок, как в демонстрационной программе FileWrite, либо по­местить раздел открытия файла в собственный t ry-блок.

Обычно использоватьотдельные try-блоки проще, а кроме того, это позволяет генерировать болееточные сообщения об ошибках.Когда процесс открытия файла завершен, программа FileRead считывает строкутекста из файла с помощью вызова ReadLine ( ) . Программа выводит эту строку наконсоль посредством хорошо знакомого вызова Console .WriteLine О , после чеговозвращается к считыванию очередной строки текста. Когда программа достигает концафайла, вызов ReadLine () возвращает значение null. Когда это происходит, програм­ма прекращает цикл чтения, закрывает объект и завершает работу.Обратите внимание, как вызов Close () обернут в свой собственный небольшой tryблок.

Блок catch без аргументов перехватывает все классы исключений (что эквивалентноcatch (Exception)). Любая ошибка, сгенерированная в Close О, перехватываетсяи игнорируется. Этот блок catch предназначен для того, чтобы предотвратить распро­странение исключения и завершение программы. Ошибка игнорируется, поскольку про­грамма ничего не может поделать со сбоем в вызове Close ( ) , тем более что через парустрок программа все равно завершается. Вы могли бы поместить вызов Close () в блокГлава 19. Работа с файлами и библиотеками443finally после блока catch для того, чтобы гарантировать его выполнение в любом случае, но в данной ситуации это излишне.Пустой catch включен исключительно в демонстрационных целях. Пред»ставление вызову собственного try-блока с перехватом всего, что можно,предотвращает завершение программы из-за несущественных ошибок.

Олиэтот метод можно использовать только если ошибка действительно некритггаи не вредит работе программы.Вот как выглядит пример вывода программы:Введите имя текстового файла:TestFilex.txtCould not find file "C:\C#Programs\FileRead\TestFilex.txt".Введите имя текстового файла:TestFilel.txtСодержимое файла:Это какой-то текстИ ещеИ еще раз...Нажмите <Enter> для завершения программы...Как видите, это тот же текст, который был записан в файл TestFilel.

txt, созданный в демонстрационной программе FileWrite (ведь вы не забыли скопировать его!каталог \FileRead\bin\debug?).444Часть VII. Дополнительные главыГлава 20Работа с коллекциямиВ этой главе...У Каталог как коллекция> Реализация коллекции LinkedLi st> Итеративный обход коллекции LinkedList> Реализация индексирования для упрощения доступа к объектам коллекций> Упрощение циклического обхода коллекции с помощью нового блока итератора С#айл представляет собой один из типов коллекций данных, но существуют и дру­гие коллекции. Например, каталог можно рассматривать как коллекцию файлов.Кроме того, С# предоставляет множество типов контейнеров в оперативной памяти.Эта глава построена на основе главы 15, "Обобщенное программирование", и мате­риале, посвященном файлам, из главы 19, "Работа с файлами и библиотеками".

Основ­ной вопрос, рассматриваемый в данной главе — проход (итерирование) по коллекциямразного вида, от каталогов до массивов и списков всех видов. Вы также узнаете, как на­писать собственный класс коллекции (более фундаментальный, чем рассматривавшийсяв главе 15, "Обобщенное программирование", пример очереди с п р и о р и т е т а м и ) — свя­занный список.Чтение и з а п и с ь — вот основное, что необходимо знать для работы с файлами.Иименно этим и занимались демонстрационные программы FileRead и FileWriteиз главы 19, "Работа с файлами и библиотеками".

Однако в ряде случаев вам простонужно просканировать каталог файлов в поисках чего-то.Приведенная далее демонстрационная программа LoopThroughFilesпросматривает все файлы в данном каталоге, считывая каждый файл и вы­водя его содержимое на консоль в шестнадцатеричном формате.

(Это де­монстрирует вам, что файл можно выводить не только в виде строк. Что -та­кое шестнадцатеричный формат — вы узнаете немного позже.)Если запустить эту программу в каталоге с большим количеством файлов, товывод шестнадцатеричного дампа может занять длительное время. Многовремени требует и вывод дампа большого файла. Либо испытайте програм­му на каталоге покороче, либо, когда вам надоест, просто нажмите клавиши<Ctrl+C>. Эта команда должна прервать выполнение программы в любомконсольном окне.// LoopThroughFiles - проход по всем файлам, содержащимся в// каталоге.

Здесь выполняется вывод шестнадцатеричного// дампа файла на экран, но могут выполняться и любые иные// действияusing System;using System. 10,namespace LoopThroughFiles{public class Program{public static void Main(string [] args){// Если каталог не указан...string sDirectoryName;if (args.Length == 0){// ... получаем имя текущего каталога...sDirectoryName = Directory.GetCurrentDirectory();}else{// ...в противном случае считаем, что первый// переданный программе аргумент и есть имя// используемого каталогаsDirectoryName = a r g s [ 0 ] ;}Console.WriteLine(sDirectoryName);// Получение списка всех файлов каталогаFileInfo[] files = GetFileList(sDirectoryName);// Проход по всем файлам списка с выводом// шестнадцатеричного дампа каждого файлаforeach(Filelnfо file in files){// Вывод имени файлаConsole.WriteLine("\п\пДамп файла{о}:",file.FullName);// Вывод содержимого файлаDumpHex(file);// Ожидание подтверждения пользователяConsole.WriteLine("\пНажмите <Enter> для вывода " +"следующего ф а й л а " ) ;Console.ReadLine() ;}// Файлы закончились!Console.WriteLine("\пБольше файлов н е т " ) ;// Ожидаем подтверждения пользователяConsole.WriteLine("Нажмите <Enter> для " +"завершения программы...");Console.Read();}// GetFileList - получение списка всех файлов в// указанном каталогеpublic static FileInfo[]GetFileList(string sDirectoryName)446Часть VII.

Дополнительные главы{// Начинаем с пустого спискаFilelnfot] files = new Filelnfо [Obtry{// Получаем информацию о каталогеDirectorylnfо di =new Directorylnfо(sDirectoryName);// В ней имеется список файловfiles = di.GetFiles();}catch(Exception e){Console .WriteLine ( "Каталог \"" + sDirectoryName +" \" неверен") ,Console.WriteLine(e.Message);}return files;}// DumpHex - для заданного файла выводит его содержимое// на консольpublic static void DumpHex(Filelnfо file){// Открываем файлFileStream fs;try{string sFileName = file.FullName;fs = new FileStream(sFileName, FileMode.Open,FileAccess.Read);// В действительности Filelnfо предоставляет метод// file.OpenRead(), который открывает FileStream за// вас, если вы слишком ленивы}catch(Exception е){Console.WriteLine("\пНе могу читать \"" +file.FullName + " \ " " ) ;Console.WriteLine(е.Message);return;}// Построчный проход по содержимому файлаfor(int nLine = 1; true; nLine++){// Считываем очередные 10 байтов (это все, что можно// разместить в одной с т р о к е ) ; выходим, когда все// байты считаныbyte[] buffer = new byte [10] ;int numBytes = fs.Read(buffer, 0, buffer.Length);if (numBytes == 0){return;}Выводимсчитанные только что данные, предваряя их 447Глава 20.

Характеристики

Тип файла
PDF-файл
Размер
14,75 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее