- •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.
17.1.2 Класс File
Класс File предназначен для работа с файлами. Он содержит статические методы, которые позволяют
создавать, удалять, переименовывать и выполнять другие операции с файлами.
Основные методы класса File:
Create – создание файла.
Exists – проверка существования файла. Delete – удалениие файла.
Move – переименование и перемещение файла. Copy – копирование файла.
Пример: Применение методов класса
//Создаем файл. File.Create("C:\\0.txt");
//Проверка существования файла. if(File.Exists("C:\\1.txt"))
{
//Удаление файла. File.Delete("C:\\1.txt");
}
File:
Задание:
Реализуйте
программу,
аналогичную примеру из параграфа 17.1.1, но работающую с
файлами.
//Переименование файла a.txt в b.txt. File.Move("C:\\a.txt", "C:\\b.txt");
//Перемещение файла. File.Move("C:\\c.txt", "D:\\c.txt");
//Копирование файла. File.Copy("D:\\z.txt", "D:\\x.txt");
17.1.3 Класс FileSystemInfo
Класс FileSystemInfo является предком для классов DirectoryInfo и FileInfo. Поэтому все его элементы присутствуют ив данных классах.
Основные свойства и методы класса FileSystemInfo (все они применимы как к файлам, так и к папкам):
Delete – метод для удаления.
CreationTime – читает или задает время создания.
LastAccessTime – читает или задает время последнего доступа.
LastWriteTime – читает или задает время последней записи.
Attributes – читает или задает атрибуты (скрытый, сжатый, системный, временный, только для чтения и др.). Один из
атрибутов (а именно Directory) позволяет выяснить, не является ли объект папкой.
FullName – читает полное имя (диск, папки, подпапки и т. д.).
Name – имя файла или папки.
17.1.4 Класс DirectoryInfo
Класс DirectoryInfo предназначен для работы с папками. Кроме стандартных операций – перемещение, удаление, создание папок и т.п. методы этого класса позволяют получить все подкаталоги и файлы указанной папки.
В отличие от класса Directory, методы класса DirectoryInfo – это методы экземпляра (т. е. они не статические).
Пример работы с классом:
//Создание объекта. DirectoryInfo di = new
DirectoryInfo("c:\\tmp\\tmp2");
// Создаем папку. di.Create();
//Вывод информации о папке. String s = "";
s += "Full nane: " + di.FullName + "\n"; s += "Root: " + di.Root + "\n";
s += "Name: " + di.Name; MessageBox.Show(s);
//Создание подпапок. di.CreateSubdirectory("subdir1"); di.CreateSubdirectory("subdir2");
//Получение имен всех подпапок. DirectoryInfo[] ds = di.GetDirectories(); s = "Вложенные папки:\n";
foreach (DirectoryInfo d in ds)
{s+=d.Name+" \n"; } MessageBox.Show(s);
// Удаление папки и всех подпапок. di.Delete(true);
TRUE – УДАЛЯЮТСЯ И ПОДПАПКИ
17.1.5 Множество FileAttributes
С помощью множества FileAttributes задаются атрибуты для файлов и папок.
Наиболее важные значения этого множества:
Directory – определяет, не есть ли объект папка.
Hidden – определяет, не является ли объект (папка или файл) скрытым.
ReadOnly – определяет, не имеет ли файл атрибут “только
для чтения”.
Normal – определяет, что для файла не установлены любые другие атрибуты. Данный элемент множества не может
комбинироваться с другими элементами этого множества. System – определяет, не является ли файл системным. Archive – определяет, не является ли файл архивным.
Compressed – определяет, не является ли файл сжатым
файлом.
Пример:
// Создание объекта DirectoryInfo. DirectoryInfo di = new
DirectoryInfo("d:\\tmp\\tmp2");
//Присваиваем атрибут "Только для чтения". di.Attributes |= FileAttributes.Hidden;
//Получаем атриубты файла.
FileAttributes fa = di.Attributes;
// Выясняем, есть ли у папки атрибут Hidden. if ((fa & FileAttributes.Hidden) ==
FileAttributes.Hidden)
{label1.Text="Hidden";}
//Выясняем, есть ли у папки атрибут ReadOnly. if ((fa & FileAttributes.ReadOnly) ==
FileAttributes.ReadOnly) { label2.Text="ReadOnly";}
17.1.6 Класс FileInfo
Класс FileInfo представляет из себя файл, находящийся на жестком диске. С помощью этого класса можно производить стандарные операции с файлом, а также получить значения характеристик файла (время последнего доступа, размер и др.) и атрибуты файла (скрытый, системный и др.).
Пример работы с файлом:
// Читаем информацию о файле.
FileInfo fi = new FileInfo(@"C:\tmp\1.txt"); FileInfo fi = new FileInfo("C:\\tmp\\1.txt");
// Выводим информацию о файле. string s = "";
// Полное имя.
s += fi.FullName + "\n";
//Только имя файла. s += fi.Name + "\n";
//Полный путь без имени файла. s += fi.DirectoryName + "\n"; MessageBox.Show(s);
// Создаем новый файл.
fi = new FileInfo(@"C:\tmp\2.txt"); FileStream fs = fi.Create();
//Закрываем поток, связанный с файлом. fs.Close();
//Показываем время создания. MessageBox.Show("Creation {0} "+
fi.CreationTime);
// Проверяем, существует ли файл. if (fi.Exists)
{
// Удаляем файл. fi.Delete();
}
17.2 Потоки данных
Все операции с файлами выполняются в программах С# с помощью так называемых потоков данных (data
stream).
Программы могут выполнять над потоками данных 3 операции:
•запись данных в поток,
•чтение данных из потока,
•позиционирование.
Программа С# может работать с потоками нескольких типов:
•стандартными потоками ввода и вывода,
•потоками, связанными с локальными файлами,
•потоками, связанными с файлами в оперативной памяти.