top of page

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

Для изучения данного вопроса будем использовать проект решения предыдущего параграфа, убрав коды обработчиков событий нажатия кнопок. Контролы RichTextBox, TextBox, OpenFileDialog и SaveFileDialog нам пока не мешают и будут полезны в дальнейшем.

Обработчик нажатия кнопки 3 и функцию Form1_Load оставим прежними:

private void button3_Click(object sender, System.EventArgs e)

{

 Application.Exit();

}

private void Form1_Load(object sender, System.EventArgs e)

{

 richTextBox1.Clear();

 textBox1.Text="";

}

Пространство имен System.IO

В предыдущем разделе в параграфе "Отображение текстовой информации" кратко мы уже останавливались на классах для работы с текстовыми файлами из пространства имен System.IO. Тогда они нам понадобилиь для простого ввода/вывода текста из/в файлы. Здесь же речь пойдет об этих и других возможностях пространства имен для работы с файлами.

В библиотеки .NET Framework более чем 2500 классов. Все они является потомками класса System.Object. При объявлении класса обычно не указывается System.Object (это добавляется по умолчанию), хотя это и можно сделать и явно:

class MyClass:System.Object

{

  ...

}

Все классы сгруппированы по пространствам имен. Пространство имен System.IO (Рис.1) содержит классы и типы данных, используемые для работы (чтение и запись) с потоками и файлами и файлоыой системой.

 

Рис.1 Пространство имен System.IO

Классы Directory и File яляются прямыми потомками класса Object и содержат статические методы для выполнения различных операций с папками и файлаи (создание, удаление, проверка существования, и т. п.).

Класс Path - прямой потомок класса Object содержат статические методы для работы с путями и именами файлов.

Классы BinaryReader и BinaryWriter, также примые наследники класса Object, содержат статические методы для для чтения и записи примитивных типов данных как бинарных значений. Он содержит методы для каждого типа (ReadBoolean, ReadByte, ReadBytes, ReadChar, ReadChars, ReadDecimal, ReadDouble и т.д.).

Классы DirectoryInfo и FileInfo - потомками абстрактного класса FileSystemInfo содержат не статические методы для выполнения операций с папками и файлами (создание, удаление, проверка существования, и т. п.). Для использования данных классов требуется создать их экземпляры. Классы FileInfo и DirectoryInfo являются "запечатанными" классами (sealed classes) - мы можем создавать экземпляры этих классов, но наследовать от них невозможно.

Класс Stream - наследник абстрактного класса MarhalByRefObjekt - также абстрактный класс, обеспечивающий представление последовательности байтов. Классы наследники класса Stream, обеспечивают функции для работы с файлами (класс FileStream), памятью (класс MemoryStream) и дают возможность создать буфер в памяти для буферизованных потоковых операций чтения и записи(BufferedStream). Потоки поддерживают операции чтения, записи, а также операции позиционирования.

Классы TextReader и TextWriter используется для чтения и записи последовательности символов потоков. Их наследники StreamReader, StringReader, StreamWriter, StringWriter обеспечивают возможность чтения и записи строк и символов в строках.


 

Класс File и его использование

Класс File содержит набор статических методов, которые могут быть использованы для создания, открытия, копирования, удаления и перемещения файлов. Некоторые из методов класса File (например Create()) создают объекты типа FileStream или StreamWriter. При рассмотрении методов класса мы пока не будем заострять внимание на возможных прерываниях при использовании методов класса (об этом более подробно при рассмотрении методов класса FileInfo - прерывания у методов обоих классов идентичны). Рассмотрим основные метода класса:

  • Delete(string path) - удаляет файл c именем и в каталоге, определенным path.

  • Exists(string path) - проверяет наличие файла в указанном каталоге - при наличии файла возвращает true.

  • Create(string path), или Create (string path, int bufersize), используется для создания файла c именем и в каталоге, определенным path и с указанным размером буфера. Методы возвращают объект типа FileStream. Исключение возникает если диск закрыт для записи.

  • private void button1_Click(object sender, System.EventArgs e)

  • {

  •  //Символ @ блокирует использование косой черты

  •  //как маркера начала спецсимвола

  •  string path = @"c:\a.txt";

  •  //Испрользование методов Exists() и Delete()

  •  if(File.Exists(path))

  •  {

  •   File.Delete(path);

  •  }

  •  //Создаем файл и объект streamwriter, который будет

  •  //существовать до закрытия фигурной скобки

  •  using(FileStream filestream = File.Create(path, 1024))

  •  {

  •   Byte[] text =

  •    new UTF8Encoding(true).GetBytes("Текст, который будет записан в файл");

  •   filestream.Write(text, 0, text.Length);

  •  }

  • }

Лабораторная работа №06 Работа с файлами и директориями

bottom of page