19. Классы для работы с файлами и папками. Свойства папок и файлов.

Для работы с файлами и папками используются классы FileInfo и DirectoryInfo в пространстве имён System.IO. Эти классы предоставляют методы экземпляра в отличие от методов File и Directory того же пространства имён, предоставляющих более общие статические методы для файлов и папок.

Работа с файлами

Работа с файлами может осуществляться при помощи классов File или FileInfo. File предоставляет только статические методы и соответственно не хранит информацию о конкретном файле, а получает её в момент вызова метода. Используя FileInfo можно создавать объекты, соответствующие файлам и хранящие данные о их свойствах. Помимо чтения файла и изменения его атрибутов, оба класса предоставляют возможность записи в файл. File содержит статические методы AppendAllLines(String, IEnumerable<String>) и AppendAllText(String, String) позволяющие легко записать в файл информацию без использования дополнительных инструментов. Класс FileInfo предоставляет возможность чтения/записи в файл только с использоанием объектов StreamReader, StreamWriter и FileStream

Список свойств и методов класса FileInfo можно увидеть на странице в MSDN

В следующем коде демонстрируются основные возможности класса FileInfo с использованием временных файлов, путь к которым получается при помощи класса Path

using System;
using System.IO;

class Test 
{

    public static void Main() 
    {
        string path = Path.GetTempFileName();
        FileInfo fi1 = new FileInfo(path);

        //Создание файла для записи с использованием StreamWriter
        using (StreamWriter sw = fi1.CreateText()) 
        {
            sw.WriteLine("Hello");
            sw.WriteLine("And");
            sw.WriteLine("Welcome");
        }

        //Открытие файла для чтения с использованием StreamReader
        using (StreamReader sr = fi1.OpenText()) 
        {
            string s = "";
            while ((s = sr.ReadLine()) != null) 
            {
                Console.WriteLine(s);
            }
        }

        try 
        {
            string path2 = Path.GetTempFileName();
            FileInfo fi2 = new FileInfo(path2);

            //Удостовериться, что целевой файл не существует
            fi2.Delete();

            //Копирование файла
            fi1.CopyTo(path2);
            Console.WriteLine("{0} was copied to {1}.", path, path2);

            //Удаление созданного файла
            fi2.Delete();
            Console.WriteLine("{0} was successfully deleted.", path2);

        } 
        catch (Exception e) 
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}

При выполнении данного кода будет выведено следующее (имена временных файлов могут отличаться):

Hello
And
Welcome
C:\Users\userName\AppData\Local\Temp\tmp70AB.tmp was copied to C:\Users\userName\AppData\Local\Temp\tmp70CB.tmp.
C:\Users\userName\AppData\Local\Temp\tmp70CB.tmp was successfully deleted.

Работа с папками

Работа с папками может осуществляться при помощи классов Directory или DirectoryInfo. Directory предоставляет только статические методы и соответственно не хранит информацию о конкретной папке, а получает её в момент вызова метода. Используя DirectoryInfo можно создавать объекты, соответствующие папкам в файловой системе, хранящие данные о свойствах конкретных папок.

Список свойств и методов класса DirectoryInfo можно увидеть на странице в MSDN

Пример метода, копирующего папки с использованием DirectoryInfo и FileInfo

using System;
using System.IO;

class CopyDir
{
    public static void CopyAll(DirectoryInfo source, DirectoryInfo target)
    {
        if (source.FullName.ToLower() == target.FullName.ToLower())
        {
            return;
        }

        // Проверка существования целевой папки, если она не существует - создаём её
            if (Directory.Exists(target.FullName) == false)
        {
            Directory.CreateDirectory(target.FullName);
        }

        // Копирование каждого файла исходной папки в целевую
        foreach (FileInfo fi in source.GetFiles())
        {
            Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name);
            fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
        }

        // Рекурсивное копирование каждой подпапки
        foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
        {
            DirectoryInfo nextTargetSubDir =
            target.CreateSubdirectory(diSourceSubDir.Name);
            CopyAll(diSourceSubDir, nextTargetSubDir);
        }
    }

    public static void Main()
    {
       string sourceDirectory = @"c:\sourceDirectory"; // Путь к исходной папке
       string targetDirectory = @"c:\targetDirectory"; // Путь к целевой папке

        DirectoryInfo diSource = new DirectoryInfo(sourceDirectory); // Создание объектов DirectoryInfo
        DirectoryInfo diTarget = new DirectoryInfo(targetDirectory);

        CopyAll(diSource, diTarget);
    }

}

results matching ""

    No results matching ""