- •17. Работа с файлами.
- •17.1 Классы для работы с папками и файлами
- •17.1.1 Класс Directory
- •Пример: Создадим приложение, позволяющее создавать, удалять, переименовывать папки, а также определять их наличие.
- •Реализуем приложение с компонентами button1..button4 и textbox1
- •На событие Click компонента button1 будем создавать папку с именем из textBox1 в
- •На событие Click компонента button2 будем проверять наличие папки с именем из textBox2
- •Почему?
- •17.1.2 Класс File
- •Пример: Применение методов класса
- •17.1.3 Класс FileSystemInfo
- •17.1.4 Класс DirectoryInfo
- •17.1.5 Множество FileAttributes
- •Пример:
- •17.1.6 Класс FileInfo
- •// Создаем новый файл.
- •17.2 Потоки данных
- •17.2.1 Потоки, связанные с файлами
- •17.2.2 Работа с двоичными файлами
- •В классе FileStream существует конструктор, позволяющий определить не только путь к файлу, но
- •После создания потока на базе файла (FileStream) следует на базе этого потока создать
- •Для записи в файл двоичных данных используется метод Write:
- •Для записи в файл двоичных данных используется метод Write:
- •Пример: создание двоичного файла, запись и чтение данных
- •// чтение из файла
- •17.2.3 Работа текстовыми файлами
- •Если открыть наш файл в блокноте, то получится следующее:
- •Непонятна также и запись текста этих строк. Проблема в том, что существуют различные
- •Кодировка указывается как статическое свойство класса System.Text.Encoding.
Если открыть наш файл в блокноте, то получится следующее:
Первая и вторая строка записаны слитно!
Это вызвано разным способом завершения их записи в файл: sw.Write("Строка 1\n");
sw.WriteLine("Строка 2");
Если
то видно, что «строка 1» завершается байтом 0A, а «строка
2» - двумя байтами OD и 0A, что более верно.
Непонятна также и запись текста этих строк. Проблема в том, что существуют различные кодировки (способы записи) символов с помощью байт. Во всех кодировках латинские символы (a, s, d, f, …), цифры (0, 1, …, 9) и знаки (+, -, *, …) записываются одинаковыми байтами, а для национальных
алфавитов это правило не соблюдается. Поэтому русский текст, записанный в одной кодировке, скорее всего окажется нечитаемым в другой кодировке.
Кодировка символов задается в конструкторе, создающем
выходной поток данных. Например, при создании потока текстовых строк StreamWriter мы можем указать в третьем параметре конструктора нужную нам кодировку:
StreamWriter sw = new StreamWriter(testFile, false,
System.Text.Encoding.UNICODE);
Кодировка указывается как статическое свойство класса System.Text.Encoding.
Возможные варианты кодировки:
ASCII Кодировка ASCII без символов кириллицы, в которой для представления текстовых символов используются младшие 7 бит байта
Unicode Кодировка UNICODE. Для представления символов используется 16 бит (т. е. 2 байта)
UTF7 Применяется для представления символов UNICODE. В
ней используются младшие 7 бит данных
UTF8 То же, но для представления символов UNICODE в ней
используется 8 бит данных
Default Системная кодировка ANSI (не путать с кодировкой ASCII).
В этой кодировке для представления каждого символа используется 8 бит данных