Работа с файлами в C#

Рассмотрим, как организовать работу с файлами, на примерах. В первом из них обратимся к низкоуровневой работе с файлами (листинг 3.12).

Листинг 3.12. Работа с файлами

using System; using System.IO; using System.Text; class Test

public static void Main()

string path=0"с:\my.txt"; if (File.Exists(path))

File.Delete(path);

FileStream fs= File.Create(path,1024);

Byte[] info =new UTF8Encoding(true).GetBytes("Hello"); fs.Write(info,0,info.Length); fs.Close () ;

StreamReader sr= File.OpenText(path); string s="";

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

Console.WriteLine(s);

Console.ReadLine();

В этом примере сначала проверяем, существует файл или нет:

string path=0"с:\my.txt"; // Задает путь к файлу;

// 0 используется, чтобы подавить действие спецсимволов,

// начинающихся с косой черты \

if (File.Exists(path)) // Проверка существования файла с

// с путем path File.Delete(path); // Если файл существует, то его удаляем

Затем создается файловая переменная для низкоуровневой записи в файл:

FileStream fs= File.Create(path,1024);

Класс Fiiestream является низкоуровневым классом для работы с байтами. Параметр 1024 задает размер создаваемого файла в байтах. Далее формируем массив байтов и записываем его в файл:

Byte[] info =new UTF8Encoding(true).GetBytes("Hello"); fs.Write(info,0,info.Length); // Производим запись

// массива байтов info

Система кодировки символов UTF8Encoding является альтернативной для ASCII. Она использует для представления каждого символа 16 бит (ASCII — соответственно 8 бит), т. e. количество представляемых символов в UTF8Encoding намного превосходит количество символов в ASCII.

Далее выполняем чтение на консоль сохраненных данных. Для этого создаем файловую переменную для ввода:

StreamReader sr= File.OpenText(path); string s="";

Класс streamReader является более высокоуровневым в сравнении с FileStream. Чтение и печать на консоль строк выполняются в цикле:

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

Console.WriteLine(s);

Оператор s=sr.ReadLine() читает строку символов, записанную ранее как массив символов. Конец файла соответствует чтению неинициализированной строки nuii.

В следующем примере рассмотрим, как можно выбрать имя файла из окна файлового диалога (листинг 3.13).

| Листинг 3.13. Работа с окном файлового диалога

using System;

using System.Window.Forms;

OpenFileDialog dlgop= new OpenFileDialog(); if (dlgop.ShowDialog()==DialogResult.OK)

Console.WriteLine(dlgop.FileName);

Объявление окна файлового диалога реализует команда

OpenFileDialog dlgop= new 0репЕПе01а1од().ЕсливыбранфаЙЛ (нажата кнопка OK), то срабатывает оператор if (digop. ShowDialog()==DialogResult.OK), после чего имя выбранного файла выводится на консоль:

Console.WriteLine(dlgop.FileName)

Еще один пример (листинг 3.14), в котором мы теперь рассмотрим работу с низкоуровневым классом Fiiestream. В этом примере вводится имя файла из консоли. Затем выполняется чтение информации из этого файла и запись считанных данных в файл с тем же именем, но с расширением bat.

Листинг 3.14. Класс FileStream

using System;

using System.Windows.Forms; using System.IO; class Example

public static void Main()

String FileName;

Console.WriteLine("Input File Name->"); FileName=Console.ReadLine();

// Открываем файл для чтения:

FileStream inf = File.OpenRead(FileName);

// Открываем другой файл для записи:

FileStream outf=File.OpenWrite(FileName+".bat");

int b; // Переменная, куда записывается считываемый байт.

// Байт всегда неотрицателен while ((b=inf.ReadByte()) >-l)

// Читаем байт; если -1, то конец файла outf.WriteByte((byte)b); // Записываем байт b в другой файл outf.Flush(); // Очищаем выходной поток outf.Close(); // Закрываем выходной поток inf.Close(); // Закрываем входной поток

В листинге 3.15 приведен пример работы с классами stream-

Reader и StreamWriter.

I Листинг 3.15. Классы StreamReader И StreamWriter

using System; using System.IO; class Ex

public static void Main()

FileStream ous=File.Create("c:\\my.txt"); // Создаем файл; // Удваиваем спецсимвол \ (обратный слэш) в строке //   "c:\\my.txt"; использование конструкции 0"c:\my.txt" не

// требует удваивать спецсимвол.

StreamWriter sw= new StreamWriter(ous); // Создаем выходную

// потоковую переменную sw sw.WriteLine("Gratuliren Sie"); // Пишем строку в файл sw.Flush(); // Выталкиваем байты из выходного потока в файл sw.Close () ;

StreamReader sr= new StreamReader("c:\\my.txt"); // Создаем // входную потоковую переменную sr String sline;

sline= sr.ReadLine(); // Читаем строку из файла Console.WriteLine(sline); // Выводим прочитанную строку на

// консоль

В листинге 3.16 приведен пример, в котором рассмотрены запись и чтение из файлов переменных других типов. Запись и чтение переменных других типов, отличных от byte и string, осуществляются С ПОМОЩЬЮ классов BinaryWriter И Bi- naryReader.

Листинг 3.16. Запись и чтение переменных различных типов

using System; using System.IO; class Ex

public static void Main()

FileStream ous= File.Create(0"c:\my.dat");

BinaryWriter bw= new BinaryWriter(ous); // Создаем // переменную bw на базе низкоуровневого класса FileStream bw.Write((int) 32); // Запись целого числа 32 bw.Write((decimal) 4.67); // Запись вещественного числа 4.67 string s="Es ist gut"; bw.Write(s); // Запись строки bw.Flush(); bw.Close () ;

// Запись двух чисел и строки завершена; приступаем к чтению FileStream ins= File.OpenRead(0"c:\my.dat");

BinaryReader br = new BinaryReader(ins); // Создаем // переменную для ввода br на базе низкоуровневого класс // FileStream

int i= br.ReadInt32(); // Читаем первое целое число decimal d = br.ReadDecimal(); // Читаем второе вещественное

// число

string sl=br.ReadString(); // Читаем строку // Теперь все выводим на консоль:

Console.WriteLine(""+i); // Присоединяем к пустой строке

// число, получаем строку

Console.WriteLine(""+d);

Console.WriteLine(""+sl) ;

Console.ReadLine(); br.Close () ;

Источник: Герман О. B., Герман Ю. О., Программирование на Java и C# для студента. — СПб.: БХВ-Петербург, 2005. — 512 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100