Слайд 2В пространстве имен System.IO предусмотрено четыре класса, которые предназначены для
работы с файловой системой компьютера.
Directory и Fi1е реализуют свои возможности
с помощью статических методов, поэтому данные классы можно использовать без создания соответствующих объектов (экземпляров классов).
DirectoryInfo и FileInfo обладают схожими функциональными возможностями c Directory и Fi1е, но порождены от класса FileSystemInfo и поэтому реализуются путем создания соответствующих экземпляров классов.
Слайд 3Работа с каталогами
Абстрактный класс FileSystemInfo
В FileSystemInfo предусмотрено несколько методов:
метод Delete()
- позволяет удалить объект файловой системы с жесткого диска
Refresh() —
обновить информацию об объекте файловой системы.
Слайд 4Некоторые свойства FileSystemInfo
Слайд 5Класс DirectoryInfo
Наследует члены класса FileSystemInfo и содержит дополнительный набор членов, которые
предназначены для :
создания,
перемещения,
удаления,
получения информации о каталогах и
подкаталогах в файловой системе.
Слайд 7Тип DirectoryInfo
создаем экземпляр класса (объект), указывая при вызове конструктора
в качестве параметра путь к нужному каталогу
/*Создаем объект DirectoryInfo, которому
будет обращаться к текущему каталогу*/
DirectoryInfo dir1 = new DirectoryInfo(".");
/*Создаем объект DirectoryInfo, которому будет обращаться к каталогу d:\prim*/
DirectoryInfo dir2 = new DirectoryInfo(@"d:\prim");
Если создается объект DirectoryInfo и связывается с несуществующим каталогом, то будет сгенерировано исключение System.IO.DirectoryNotFoundException.
Слайд 8using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
//создаем объект DlrectoryInfo, который связан
с каталогом d:\БГУИР, выводим информацию о каталоге
class Program {
static void
Main(string[] args) {
DirectoryInfo dir = new DirectoryInfo(@"d:\БГУИР");
Console.WriteLine("***** "+dir.Name+" *****");
Console.WriteLine("FullName: {0}", dir.FullName);
Console.WriteLine("Name: {0}", dir.Name);
Console.WriteLine("Parent: {0}", dir.Parent);
Console.WriteLine("Creation: {0}", dir.CreationTime);
Console.WriteLine("Attributes: {0}", dir.Attributes.ToString());
Console.WriteLine("Root: {0}", dir.Root);
} } } }
Слайд 9Свойство Attributes позволяет получить информацию об атрибутах объекта файловой системы
Слайд 10//Через DirectoryInfo можно не только получать доступ к информации о
текущем каталоге, но получить доступ к информации о его подкаталогах
class Program {
static void printDirect(DirectoryInfo dir) {
Console.WriteLine("***** " + dir.Name + " *****");
Console.WriteLine("FullName: {0}", dir.FullName);
Console.WriteLine("Name: {0}", dir.Name);
Console.WriteLine("Parent: {0}", dir.Parent);
Console.WriteLine("Creation: {0}", dir.CreationTime);
Console.WriteLine("Attributes: {0}", dir.Attributes.ToString());
Console.WriteLine("Root: {0}", dir.Root);
}
static void Main(string[] args) {
DirectoryInfo dir = new DirectoryInfo(@"d:\БГУИР");
printDirect(dir);
DirectoryInfo[] subDirects = dir.GetDirectories();
Console.WriteLine("Найдено {0} подкаталогов", subDirects.Length);
foreach (DirectoryInfo d in subDirects)
{ printDirect(d); }
}
}
Слайд 12Метод CreateSubdirectory()
позволяет создать в выбранном каталоге как единственный подкаталог,
так и множество подкаталогов (в том числе, и вложенных друг
в друга).
Создадим в каталоге несколько дополнительных подкаталогов:
DirectoryInfo dir = new DirectoryInfo(@"d:\БГУИР");
dir.CreateSubdirectory("doc"); //создали подкаталог
dir.CreateSubdirectory(@"book\2012"); //создали вложенный подкаталог
Слайд 13Метод MoveTo()
позволяет переместить текущий каталог по заданному в качестве
параметра адресу. При этом возможно произвести переименование каталога.
DirectoryInfo dir
= new DirectoryInfo( @"d:\БГУИР\bmp");
dir.( @"d:\БГУИР\ggg\bmp");
В данном случае каталог bmp перемещается в по адресу d:\БГУИР\ggg\bmp
Так как имя перемещаемого каталога совпадает с крайним правым именем в адресе нового местоположения каталога, то переименования не происходит.
//переименование текущего каталога:
DirectoryInfo dir = new DirectoryInfo(@"d:\БГУИР\ggg");
dir.MoveTo(@"d:\БГУИР\archive");
Замечания.
Удаление каталога возможно только тогда, когда он пуст.
На практике комбинируют использование классов Directory и DirectoryInfo.
Слайд 14Работа с файлами
Класс Filelnfo
предназначен для организации доступа к физическому файлу,
который содержится на жестком диске компьютера.
позволяет получать информацию об этом
файле (о времени его создания, размере, атрибутах и т. п.),
производить различные операции (по созданию файла или его удалению).
наследует члены класса FileSystemInfo и содержит дополнительный набор членов
Слайд 15Класс FileInfo наследует члены класса FileSystemInfo и содержит дополнительный набор членов
static void Main(){
//создаем новый файл и связываем с ним
строковый поток
FileInfo f = new FileInfo("text.txt");
StreamWriter fOut = new StreamWriter(f.Create());
//записываем в файл данные и закрываем строковый поток,
// при этом связь с физическим файлом для f не рвется
fOut.WriteLine("ОДИН ДВА ТРИ...");
fOut.Close();
//получаем информацию о файле
Console.WriteLine("*******" + f.Name+ "******************");
Console.WriteLine("File size: {0}", f.Length);
Console.WriteLine("Creation: {0}", f.CreationTime);
Console.WriteLine("Attributes: {0}", f.Attributes.ToString());}
}
Слайд 17 using System;
using System.Text;
using
System.IO; //для работы с файловым вводом-выводом
using System.Text.RegularExpressions;
namespace
ConsoleApplication1 {
class Program {
// пример по удалению файлов:
static void printFile(FileInfo file) {
Console.WriteLine("***** " + file.Name + " *****");
Console.WriteLine("File size: {0}", file.Length);
Console.WriteLine("Creation: {0}", file.CreationTime);
Console.WriteLine("Attributes: {0}", file.Attributes.ToString());
}
static void Main(string[] args) {
DirectoryInfo dir = new DirectoryInfo(@"d:\БГУИР\ggg");
FileInfo[] files = dir.GetFiles();
if (files.Length != 0)
{
Console.WriteLine("Найдено {0} файла", files.Length);
foreach (FileInfo f in files)
{ printFile(f); f.Delete(); }
Console.WriteLine("\nТеперь в каталоге содержится {0} файлов и можно его удалить",
dir.GetFiles().Length);
dir.Delete();
}
} } }
Слайд 19Класс File
Доступ к физическим файлам можно получать и через статические
методы класса File.
static void Main(string[] args)
{
File.Copy(@"d:\prim\letter\letter1.txt",@"d:\prim\bmp\letter1.txt");
Directory.CreateDirectory(@"d:\prim\archives");
File.Move(@"d:\prim\letter\letter1.txt",@"d:\prim\archives\letter1.txt");
File.Delete(@"d:\prim\letter\letter2.txt");
Directory.Delete(@"d:\prim\letter");
}
Имеет прямой смысл
использовать статический класс File, когда требуется осуществить единственный вызов метода на объект (вызов будет выполнен быстрее, т.к..NET Framework не придется проходить через процедуру создания экземпляра нового объекта с последующим вызовом метода).
Если приложение осуществляет несколько операций над файлом, то более разумным представляется создать экземпляр объекта FileInfo и использовать его методы (это позволит сэкономить определенное время, поскольку объект будет заранее настроен на нужный файл в файловой системе, в то время как статическому классу придется каждый раз осуществлять его поиск заново)
Аналогичное правило действует и при выборе между классами Directory и DirectoryInfo.