- •Лекция 11. Файлы в с# Основные понятия. Классы .Net для работы с файлами
- •Виды файлов
- •Алгоритм работы с файловыми потоками
- •Байтовые файлы (потоки)
- •Обработка исключительных ситуаций при работе с файлами
- •Текстовые файлы
- •Пример преобразования чисел, содержащихся в текстовом файле
- •Консольный ввод-вывод
- •Работа с каталогами и файлами
Консольный ввод-вывод
Для организации ввода и вывода используется класс Console, определенный в пространстве именSystem. В этом классе определены три стандартных потока: входной потокConsole.InклассаTextReaderи выходные потокиConsole.OutиConsole.ErrorклассаTextWriter.
По умолчанию входной поток связан с клавиатурой, а выходные – с экраном, однако можно перенаправить эти потоки на другие устройства с помощью методов SetInиSetOutили средствами операционной системы (перенаправление с помощью операции << и >>).
При обмене с консолью можно применять методы указанных потоков, но чаще используется методы класса Console–Read,ReadLine,WriteиWriteLine, которые просто передают управление методам нижележащих классовIn,OutиError.
Работа с каталогами и файлами
В пространстве имен System.IOесть четыре класса, предназначенные для работы с физическими файлами и структурой каталогов на диске:Directory, File, DirectoryInfo и FileInfo. С их помощью можно выполнять создание, удаление, перемещение файлов и каталогов, а также получение их свойств. Основные элементы этих классов представлены в таблицах 11.9 и 11.10.
Таблица 11.9 - Свойства класса FileSystemInfo
Свойства Описание
AttributesПолучить или установить атрибуты для данного объекта файловой
системы. Для этого свойства используется значение FileAttributes
CreationTimeПолучить или установить время создания объекта файловой системы
ExistsОпределить, существует ли данный объект файловой системы
ExtensionПолучить расширение файла
FullNameВозвратить имя файла или каталога с указанием полного пути
LastWriteTimeПолучить или установить время последнего обращения к объекту
файловой системы
LastWriteTimeПолучить или установить время последнего внесения изменений в объект
файловой системы
NameВозвратить имя файла. Это свойство доступно только для чтения.
Для каталогов возвращает имя последнего каталога в иерархии, если
это возможно. Если нет, возвращает полностью определенное имя
Таблица 11.10 - Элементы класса DirectoryInfo
Элемент Описание
Create, Создать каталог или подкаталог по указанному пути в файловой
CreateSubDirectoryсистеме
DeleteУдалить каталог со всем его седержимым
GetDirectoriesВозвратить массив строк, представляющих все подкаталоги
GetFilesПолучить файлы в текущем каталоге в виде массива объектов
класса FileInfo
MoveToПереместить каталог и все его содержимое на новый адрес
в файловой системе
ParentВозвратить родительский каталог
Пример работы с файлами и каталогами с использованием класса Directory
В данном примере создаются два каталога, выводится информация о них и предпринимается попытка удаления каталога.
using System;
using System.IO;
namespace ConsoleApplication1
{
class Class1
{
static void DirInfo(DirectoryInfo di)
{
//вывод информации о каталоге
Console.WriteLine("=====Directory Info=====");
Console.WriteLine("FullName:" + di.FullName);
Console.WriteLine("Name:" + di.Name);
Console.WriteLine("Parent:" + di.Parent);
Console.WriteLine("Creation:" + di.CreationTime);
Console.WriteLine("Attributes:" + di.Attributes);
Console.WriteLine("Root:" + di.Root);
Console.WriteLine("==========================");
}
static void Main()
{
DirectoryInfo di1 = new DirectoryInfo(@"с:\MyDir");
DirectoryInfo di2 = new DirectoryInfo(@"c:\MyDir\temp");
try
{
//Создать каталоги
di1.Create();
di2.Create();
//Вывести информацию о каталогах
DirInfo(di1);
DirInfo(di2);
//Попытаться удалить каталог
Console.WriteLine("Попытка удалить {0}.", di1.Name);
di1.Delete();
}
catch (Exception)
{
Console.WriteLine("Попытка не удалась");
} } }
* Результат работы программы
* =====Directory Info=====
* FullName: c:\MyDir
* Name: MyDir
* Parent:
* Creation: 30.04.2006 17:14:44
* Attributes: Directory
* Root: c:\
* ========================
* =====Directory Info=====
* FullName: c:\MyDir\temp
* Name: temp
* Parent:
* Creation: 30.04.2006 17:14:44
* Attributes: Directory
* Root: c:\
* ========================
* Попытка удалить MyDir
* Попытка не удалась
Каталог не пуст, поэтому попытка его удаления не удалась. Однако, если использовать метод Delete с одним параметром, задающим режим удаления, можно удалить и непустой каталог:
di1.Delete( true ); //удаляет непустой каталог
Пример работы с файлами и каталогами с использованием класса FileInfo
В данном примере копируются все файлы с расширением jpgиз каталогаd:\fotoв каталогd:\temp. МетодExistsпозволяет проверить, существует ли исходный каталог.
using System;
using System.IO;
namespace ConsoleApplication1
{
class Class1
{
static void Main()
{
try
{ string DestName = @"d:\temp\";
DirectoryInfo dest = new DirectoryInfo(DestName);
dest.Create(); //создание целевого каталога
DirectoryInfo dir = new DirectoryInfo(@"d:\foto");
if (!dir.Exists) //проверка существования каталога
{
Console.WriteLine("Каталог " +
dir.Name + " не существует");
Console.ReadKey();
return;
}
FileInfo[] files = dir.GetFiles("*.jpg"); //список файлов
foreach (FileInfo f in files)
f.CopyTo(dest + f.Name); //копирование файла
Console.WriteLine("Скопировано" + files.Length + "jpg-файлов");
}
catch (Exception e) { Console.WriteLine("Error:" + e.Message); } } } }
