|
Программирование >> Автоматически обновляемые приложения
] Листинг 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 будет загружена только одна строка.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |