Практическое руководство. Получение сведений о файлах, папках и дисках (Руководство по программированию на C#)

В платформе .NET Framework доступ к сведениям о файловой системе можно получить, используя следующие классы:

Классы FileInfo и DirectoryInfo представляют файл или каталог, и содержат свойства, представляющие многие атрибуты файла, поддерживаемые файловой системой NTFS. Они также содержат методы для открытия, закрытия, перемещения и удаления файлов и папок. Экземпляры этих классов можно создать, передав строку, представляющую в конструктор имя файла, папки или диска.

System.IO.DriveInfo di = new System.IO.DriveInfo(@"C:\");

Имена файлов, папок или дисков можно также получить, используя вызовы DirectoryInfo.GetDirectories, DirectoryInfo.GetFiles и DriveInfo.RootDirectory.

Классы Directory и File предоставляют статические методы для поиска данных о каталогах и файлах.

Пример

В следующем примере показаны различные способы доступа к сведениям о файлах и папках.

class FileSysInfo
{
    static void Main()
    {
        // You can also use System.Environment.GetLogicalDrives to 
        // obtain names of all logical drives on the computer.
        System.IO.DriveInfo di = new System.IO.DriveInfo(@"C:\");
        Console.WriteLine(di.TotalFreeSpace);
        Console.WriteLine(di.VolumeLabel);

        // Get the root directory and print out some information about it.
        System.IO.DirectoryInfo dirInfo = di.RootDirectory;
        Console.WriteLine(dirInfo.Attributes.ToString());

        // Get the files in the directory and print out some information about them.
        System.IO.FileInfo[] fileNames = dirInfo.GetFiles("*.*");


        foreach (System.IO.FileInfo fi in fileNames)
        {
            Console.WriteLine("{0}: {1}: {2}", fi.Name, fi.LastAccessTime, fi.Length);
        }

        // Get the subdirectories directly that is under the root. 
        // See "How to: Iterate Through a Directory Tree" for an example of how to
        // iterate through an entire tree.
        System.IO.DirectoryInfo[] dirInfos = dirInfo.GetDirectories("*.*");

        foreach (System.IO.DirectoryInfo d in dirInfos)
        {
            Console.WriteLine(d.Name);
        }

        // The Directory and File classes provide several static methods 
        // for accessing files and directories. 

        // Get the current application directory. 
        string currentDirName = System.IO.Directory.GetCurrentDirectory();
        Console.WriteLine(currentDirName);           

        // Get an array of file names as strings rather than FileInfo objects. 
        // Use this method when storage space is an issue, and when you might 
        // hold on to the file name reference for a while before you try to access 
        // the file. 
        string[] files = System.IO.Directory.GetFiles(currentDirName, "*.txt");

        foreach (string s in files)
        {
            // Create the FileInfo object only when needed to ensure 
            // the information is as current as possible.
            System.IO.FileInfo fi = null;
            try
            {
                 fi = new System.IO.FileInfo(s);
            }
            catch (System.IO.FileNotFoundException e)
            {
                // To inform the user and continue is 
                // sufficient for this demonstration. 
                // Your application may require different behavior.
                Console.WriteLine(e.Message);
                continue;
            }
            Console.WriteLine("{0} : {1}",fi.Name, fi.Directory);
        }

        // Change the directory. In this case, first check to see 
        // whether it already exists, and create it if it does not. 
        // If this is not appropriate for your application, you can 
        // handle the System.IO.IOException that will be raised if the 
        // directory cannot be found. 
        if (!System.IO.Directory.Exists(@"C:\Users\Public\TestFolder\"))
        {
            System.IO.Directory.CreateDirectory(@"C:\Users\Public\TestFolder\");
        }

        System.IO.Directory.SetCurrentDirectory(@"C:\Users\Public\TestFolder\");

        currentDirName = System.IO.Directory.GetCurrentDirectory();
        Console.WriteLine(currentDirName);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}

Отказоустойчивость

При обработке заданных пользователем строк, определяющих пути, необходимо также обрабатывать исключения для следующих условий:

  • Неверное имя файла. Например, оно содержит недопустимые символы или состоит из одних пробелов.

  • Именем файла является NULL.

  • Имя файла больше максимальной длины, определенной системой.

  • Имя файла содержит двоеточие (:).

Если у приложения недостаточно прав для чтения указанного файла, метод Exists возвратит значение false независимо от существования указанного пути. Исключений этот метод не вызывает.

См. также

Ссылки

System.IO

Основные понятия

Руководство по программированию на C#

Другие ресурсы

Файловая система и реестр (Руководство по программированию на C#)