Программирование >>  Автоматически обновляемые приложения 

1 ... 110 111 112 [ 113 ] 114 115 116 ... 170


] Листинг 10.30. Построчное чтение текстового файла

private void buttonl2 Click(object sender, EventArgs e) (

Создадим экземпляр StreainReader для чтения из файла using (System.10.StreamReader sr =

new 10. St reamReader ((3 c: \wutemp\text. txt ) )

String line;

Читаем каждую строку, пока не достигнем конца файла

while ((line = sr.ReadLine()) != null)

MessageBox.Show(line) ;

Загрузить текстовый файл в список?

Надо сказать, что в .NET Framework 2.0 появились новые методы ReadAllLines И ReadAiiText, которые также ПОЗВОЛЯЮТ считывать данные из текстового файла. Поэтому, чтобы не отставать от времени, в новых проектах будем использовать более современные приемы программирования (листинг 10.31).

1 Листинг 10.31. Загрузка текстового файла в список

private void buttonl3 Click(object sender, EventArgs e) {

int index = 2;

номер строки, с которой начинать

string path = (3 с: \wutemp\text. txt ; путь к файлу string[] allLines = System.10.File.ReadAllLines(path); for (int i = index; i < allLines.Length - 1; i++) {

listBoxl.Items.Add(allLines[i]) ;

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



StringBuilder sb = new StringBuilder() ;

using (StreamReader sr = new StreamReader(filename))

while (sr.Peek 0 >= 0) {

sb.AppendLine(sr.ReadLine() ) ;

textBoxl.Text = sb.ToString();

В этом примере мы использовали метод класса StreamReader. Сравните этот

код с кодом в листинге 10.33, где используется новый метод ReadAllText.

рЛистинг 10.33. чтение данных из текстового Файла (новый способ)

Получение данных из файла с использованием метода ReadAllText textBoxl.Text = File.ReadAllText(filename);

Например, если нужно просто открыть какой-то текстовый файл и скопировать его содержимое в текстовое поле, то метод ReadAllText идеально подходит для этой задачи. Для метода ReadAllText нет необходимости заключать вызов в блок try, поскольку прикладной программный интерфейс сам выполнит важную задачу закрытия файла. Производительность в обоих случаях примерно одинаковая, но использовать метод ReadAllText гораздо проще. Новые интерфейсы прикладного программирования для класса File

(ReadAllLines, ReadAllText, ReadAllBytes) СЧИТЫВаЮТ веСЬ файл Сразу И сохраняют эту информацию в памяти. Если при извлечении данных нужно выполнить преобразование в соответствии с некоторой логикой или если данные преобразуются в другие типы, то, возможно, лучше считывать по одной

Примечание

Кроме описанных методов ReadAllLines И ReadAllText В .NET

Framework 2.0 появилось еще несколько удобных методов для работы с файлами. Обязательно почитайте документацию.

Давайте остановимся на этих примерах, чтобы лучше разобраться в новых методах. До появления метода ReadAllText для получения данных из текстового файла нужно было писать код вроде приведенного в листинге 10.32.

\ Листинг 10.32, Чтение данных из текстового файла (старый способ)



Как получить короткое имя файла из длинного файла и наоборот?

Ветераны программирования, работавшие с операционной системой DOS, помнят те времена, когда было ограничение 8.3 на число символов в имени файла и расширении. И, например, такая популярная в свое время программа, как Norton Commander, автоматически создавала из длинных имен короткое по схеме 8.3 . В современном программировании необходимость преобразовывать длинное имя файла в короткое уходит в прошлое, но на всякий случай возьмите этот пример (листинг 10.34) на заметку. Для преобразования имен нам понадобятся две функции Windows АР! GetshortPathName и

GetLongPathName.

i Листинг 10.34. Получение короткого и длинного имени файла

[Dlllmport( kernel32.dll , CharSet = CharSet.Auto)] public static extern int GetshortPathName( [MarshalAs(UnmanagedType.LPTStr)] string path, [MarshalAs(UnmanagedType.LPTStr)] StringBuiider shortPath, int shortPathLength

[Dlllmport( kernel32.dll , CharSet = CharSet.Auto)] public static extern int GetLongPathName( [MarshalAs(UnmanagedType.LPTStr)] string path, [MarshalAs(UnmanagedType.LPTStr)] StringBuiider longPath, int longPathLength

private void buttonl4 Click(object sender, EventArgs e) {

StringBuiider shortPath = new StringBuiider(1024); GetshortPathName ((a C:\Program Files\Microsoft SilverlightX + (3 Microsoft. Scripting. Silverlight. dll ,

строке за раз и освобождать данные при переходе к следующей строке. Особенно это существенно при работе с большими файлами. При использовании метода File.ReadAllLines данные ИЗ файла будут все время находиться в

памяти, а при использовании метода StreamReader.ReadLine будет загружена только одна строка.



1 ... 110 111 112 [ 113 ] 114 115 116 ... 170

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