devstory

Manipulation de fichiers et de répertoires dans C#

  1. La hiérarchie de classes
  2. File
  3. Directory
  4. FileInfo
  5. DirectoryInfo
  6. DriveInfo

1. La hiérarchie de classes

Class
Description
File
File is a utility class. It provides static methods for the creation, copying, deletion, moving, and opening of a single file, and aids in the creation of FileStreamobjects.
Directory
Directory is a utility class, It provides static methods for creating, moving, and enumerating through directories and subdirectories. This class cannot be inherited.
FileInfo
FileInfo is a class that represents a file. It provides properties and instance methods for the creation, copying, deletion, moving, and opening of files, and aids in the creation of FileStream objects. This class cannot be inherited.
DirectoryInfo
DirectoryInfo is a class representing a directory. It provides methods for creating, moving, and enumerating through directories and subdirectories. This class cannot be inherited.
DriveInfo
DirveInfo is a class, it provides access to information on a drive.

2. File

File est une classe d'utilitaire. Elle fournit des méthodes statistiques pour la création, le copiage, l'effacement, le déplacement et l'ouverture d'un fichier et fournit l'objet FileStream.
L'exemple ci- dessous vérifie si un chemin du fichier existe ou pas, efface ce fichier s'il existe.
DeleteFileDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class DeleteFileDemo
    {
        public static void Main(string[] args)
        {
            string filePath = "C:/test/test.txt";

            // Vérifiez si le chemin existe ou non\?
            if (File.Exists(filePath))
            {
                // Effacez le fichier
                File.Delete(filePath);

                // Revérifiez encore une fois l'existence du fichier.
                if (!File.Exists(filePath))
                {
                    Console.WriteLine("File deleted...");
                } 
            }
            else
            {
                Console.WriteLine("File test.txt does not yet exist!");
            } 
            Console.ReadKey();
        }
    } 
}
Exécution l'exemple:
File deleted...
Le changement le nom du fichier peut comprendre de déplacer le fichier à un autre fichier et de changer le nom du fichier. Au cas où le déplacement à un autre fichier pour assurer que le fichier existe.
RenameFileDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class RenameFileDemo
    {
        public static void Main(string[] args)
        {
            String filePath = "C:/test/test.txt";

            if (File.Exists(filePath))
            {
                Console.WriteLine(filePath + " exist");  
                Console.WriteLine("Please enter a new name for this file:");
                
                // Une String que l'utilisateur saisait.
                // Exemple: C:/test/test2.txt
                string newFilename = Console.ReadLine(); 
                if (newFilename != String.Empty)
                {
                    // Renommez le fichier:
                    // Peut inclure le déplacement du fichier vers un autre dossier et le renommage du fichier.
                    // Vous devez vous assurer que le dossier de destination existe.
                    // (Sinon, DirectoryNotFoundException sera lancé).
                    File.Move(filePath, newFilename);

                    if (File.Exists(newFilename))
                    {
                        Console.WriteLine("The file was renamed to " + newFilename); 
                    }
                }
            }
            else
            {
                Console.WriteLine("Path " + filePath + " does not exist.");
            } 
            Console.ReadLine();
        }
    } 
}
L'exécution de l'exemple:
C:/test/test.txt exist
Please enterr a new name for this file:
C:/test/test2.txt
The file was renamed to C:/test/test2.txt

3. Directory

Directory est une classe d'utilitaire. Elle fournit des méthodes statistiques pour la création, le déplacement et l'énumération à travers des répertoires et des sous- répertoires. Cette classe n'a pas de classes héritères.
Par exemple, vérifiez si le chemin du répertoire existe ou pas, s'il n'existe pas, créez ledit répertoire, imprimez le temps de la création, la dernière fois d'écriture, ...
DirectoryInformationDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class DirectoryInformationDemo
    {
        public static void Main(string[] args)
        {
            String dirPath = "C:/test/CSharp";

            // Vérifiez si un chemin d'accès au répertoire existe ou non.
            bool  exist = Directory.Exists(dirPath);

            // Si ce n'est pas le cas, créez-le
            if (!exist)
            {
                Console.WriteLine(dirPath + " does not exist.");
                Console.WriteLine("Create directory: " + dirPath);

                // Créez le répertoire.
                Directory.CreateDirectory(dirPath);
            } 
            Console.WriteLine("Directory Information " + dirPath);

            // Imprimer les infos de ce ledit répertoire
            // Temps de creation
            Console.WriteLine("Creation time: "+ Directory.GetCreationTime(dirPath));

            // Dernier temps de l'écriture.
            Console.WriteLine("Last Write Time: " + Directory.GetLastWriteTime(dirPath));

            // Répertoire parent.
            DirectoryInfo parentInfo = Directory.GetParent(dirPath); 
            Console.WriteLine("Parent directory: " + parentInfo.FullName); 
            Console.Read();
        }
    } 
}
Exécutez l'exemple:
Directory Information C:/test/CSharp
Creation time: 12/5/2015 9:46:10 PM
Last Write Time: 12/5/2015 9:46:10 PM
Parent directory: C:\test
Changement le nom du fichier:
Vous pouvez changer le nom d'un fichier. Il peut être déplacer ledit fichier à un répertoire parent qui existe déjà. Mais vous devez assurer que le nouveau répertoire parent doit déjà exister. L'exemple ci- dessous illustre comment changer le nom du fichier:
RenameDirectoryDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class RenameDirectoryDemo
    {
        public static void Main(string[] args)
        {
            // Un chemin d'accès d'un répertoire.
            String dirPath = "C:/test/CSharp";

            // Si ce chemin existe.
            if (!Directory.Exists(dirPath))
            {
                Console.WriteLine(dirPath + " does not exist.");
                Console.Read();  
                return;
            }  
            Console.WriteLine(dirPath + " exist"); 
            Console.WriteLine("Please enter a new name for this directory:");

            // La chaine (String) que l'utilisateur saisit.
            // Par exemple: C:/test2/Java
            string newDirname = Console.ReadLine();

            if (newDirname == String.Empty)
            {
                Console.WriteLine("You not enter new directory name. Cancel rename.");
                Console.Read(); 
                return;
            } 
            // Si le chemin saisit par l'utilisateur existe.
            if (Directory.Exists(newDirname))
            {
                Console.WriteLine("Cannot rename directory. New directory already exist.");
                Console.Read(); 
                return;
            } 
            // Le répertoire parent.
            DirectoryInfo parentInfo = Directory.GetParent(newDirname);

            // Créez le répertoire parent du nouveau dossier que l'utilisateur saisit.
            Directory.CreateDirectory(parentInfo.FullName);

            // Vous pouvez changer le chemin  (path) d'un répertoire.
            // mais assurez-vous que le chemin parent du nouveau chemin existe.
            // (Si non, DirectoryNotFoundException sera enlevé).
            Directory.Move(dirPath, newDirname);

            if (Directory.Exists(newDirname))
            {
                Console.WriteLine("The directory was renamed to " + newDirname);
            } 
            Console.ReadLine();
        }
    } 
}
Exécutez l'exemple:
C:/test/CSharp exist
Please enter a new name for this directory:
C:/test2/Java
The directory was renamed to C:/test2/Java
L'exemple de récursion suivant imprime tous les sous- répertoires, les petits- enfants,... d'un fichier.
EnumeratingDirectoryDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class EnumeratingDirectoryDemo
    {
        public static void Main(string[] args)
        {
            string dirPath = "C:/Windows/System32"; 
            PrintDirectory(dirPath); 
            Console.Read();
        } 
        // La méthode récursive (Recursive) pour lister les sous-dossiers d'un dossier..
        public static void PrintDirectory(string dirPath)
        {
            try
            {
                // Si vous n'avez pas un accès suffisant au dossier 'dirPath'
                // une exception UnauthorizedAccessException sera enlevée.
                IEnumerable<string> enums = Directory.EnumerateDirectories(dirPath); 
                List<string> dirs = new List<string>(enums); 
                foreach (var dir in dirs)
                {
                    Console.WriteLine(dir); 
                    // La méthode récursive (Recursive) pour rechercher des sous-dossiers.
                    PrintDirectory(dir);
                }
            }
            // L'rrreur de sécurité lors de l'accès au répertoire où vous n'avez pas d'autorisation.
            catch (UnauthorizedAccessException e)
            {
                Console.WriteLine("Can not access directory: " + dirPath);
                Console.WriteLine(e.Message);
            }
        }
    } 
}
Exécutez l'exemple:
...
C:/Windows/System32\wbem\en-US
C:/Windows/System32\wbem\Logs
C:/Windows/System32\wbem\Repository
C:/Windows/System32\wbem\tmf
C:/Windows/System32\wbem\eml
C:/Windows/System32\WCN
C:/Windows/System32\WCN\en-US
...

4. FileInfo

FileInfo est une classe qui représente un fichier. Elle fournit des propriétés et des méthodes d'instance pour la création, le copiage, l'effacement, le déplacement et l'ouverture d'un fichier et aide dans la création les objets de FileStream. Cette classe n'a pas de classes héritères.
La différence entre 2 classes File et FileInfo est que la classe File est une classe d'utilitaire dont les méthodes sont statiques, alors que la classe FileInfo représente un fichier particulier.
FileInfoDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
 
namespace FileDirectoryTutorial
{
    class FileInfoDemo
    {
        static void Main(string[] args)
        {
            // Un objet qui représente un fichier.
            FileInfo testFile = new FileInfo("C:/test/test.txt");  
            if (testFile.Exists)
            {
                Console.WriteLine(testFile.FullName + " exist."); 
                // Le moment de la création du fichier.
                Console.WriteLine("Creation time: " + testFile.CreationTime);

                // La dernière heure d'écriture.
                Console.WriteLine("Last Write Time " + testFile.LastWriteTime);

                // Le nom du répertoire parent qui comprend ce fichier.
                Console.WriteLine("Directory Name: " + testFile.DirectoryName);
            }
            else
            {
                Console.WriteLine(testFile.FullName + " does not exist.");
            }
            Console.Read();
        } 
    } 
}
Exécutez l'exemple:
C:\test\test.txt exist.
Creation time: 12/5/2015 7:47:40 PM
Last Write Time 12/5/2015 10:17:29 PM
Directory Name: C:\test
Le changement le nom du fichier est une action spécifique qui comprend le déplacement d'un fichier à un autre fichier et le changement le nom du fichier. Au cas où, le fichier est déplacé à un autre fichier pour assurer le nouveau fichier existe.
RenameFileInfoDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class RenameFileInfoDemo
    {
        public static void Main(string[] args)
        { 
            FileInfo fileInfo = new FileInfo("C:/test/test.txt"); 
            if (!fileInfo.Exists)
            {
                Console.WriteLine(fileInfo.FullName + " does not exist.");
                Console.Read(); 
                return;
            } 
            Console.WriteLine(fileInfo.FullName + " exist");  
            Console.WriteLine("Please enter a new name for this file:");

            // Une chaine (string) que l'utilisateur saisit.
            // Par exemple: C:/test/test2.txt
            string newFilename = Console.ReadLine();

            if (newFilename == String.Empty)
            {
                Console.WriteLine("You not enter new file name. Cancel rename"); 
                Console.Read(); 
                return;
            } 
            FileInfo newFileInfo = new FileInfo(newFilename);

            // Si le fichier 'newFileInfo' existe (Impossible de renommer).
            if (newFileInfo.Exists)
            {
                Console.WriteLine("Can not rename file to " + newFileInfo.FullName + ". File already exist."); 
                Console.Read(); 
                return;
            } 
            // Créez le répertoire parent du fichier 'newFileInfo'.
            newFileInfo.Directory.Create();

            // Renommez le nom du fichier.
            fileInfo.MoveTo(newFileInfo.FullName);

            // Refresh. 
            newFileInfo.Refresh();

            if (newFileInfo.Exists)  
            {
                Console.WriteLine("The file was renamed to " + newFileInfo.FullName);
            }  
            Console.ReadLine();
        }
    } 
}
Exécutez l'exemple:
C:\test\test.txt exist
Please enter a new name for this file:
C:/test2/test2.txt
The file was renamed to C:\test2\test2.txt

5. DirectoryInfo

DirectoryInfo est une classe qui représente un fichier. Elle fournit des méthodes pour la création, le déplacement, l'énumération à travers des répertoires et des sous- répertoires. Cette classe n'a pas de classes héritères.
La différence entre 2 classes Directory et DirectoryInfo est que la classe Directory est une classe d'utilitaire dont les méthodes sont statiques, alors que la classe DirectoryInfo représente un fichier spécifique.
DirectoryInfoDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class DirectoryInfoDemo
    {
        static void Main(string[] args)
        {
            // Un objet représentant un répertoire.
            DirectoryInfo dirInfo = new DirectoryInfo("C:/Windows/System32/drivers");

            // Ecrivez le temps de création du fichier.
            Console.WriteLine("Creation time: " + dirInfo.CreationTime);

            // Écrivez la dernière heure d'écriture du fichier.
            Console.WriteLine("Last Write Time " + dirInfo.LastWriteTime);

            // Le nom complet du répertoire.
            Console.WriteLine("Directory Name: " + dirInfo.FullName);

            // Le tableau de sous-dossiers.
            DirectoryInfo[] childDirs = dirInfo.GetDirectories();

            // Un tableau de fichiers dans le dossier.
            FileInfo[] childFiles = dirInfo.GetFiles(); 
            foreach(DirectoryInfo childDir in childDirs ){
                Console.WriteLine(" - Directory: " + childDir.FullName);
            } 
            foreach (FileInfo childFile in childFiles)
            {
                Console.WriteLine(" - File: " + childFile.FullName);
            } 
            Console.Read();
        }
    } 
}
Exécutez l'exemple:
Creation time: 7/14/2009 10:20:14 AM
Last Write Time 11/21/2010 2:06:51 PM
Directory Name: C:\Windows\System32\drivers
 - Directory: C:\Windowws\System32\drivers\en-US
 - File: C:\Windowws\System32\gm.dls
 - File: C:\Windowws\System32\gmreadme.txt
 - File: C:\Windowws\System32\winmount.sys

6. DriveInfo

DirveInfo est une classe. Elle founit des méthodes d'accès des informations dans un lecteur.
DriveInfoDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class DriveInfoDemo
    {
        static void Main(string[] args)
        {
            DriveInfo[] drives = DriveInfo.GetDrives(); 
            foreach (DriveInfo drive in drives)
            {
                Console.WriteLine(" ============================== "); 
                // Nom du lecteur (C, D, ..)
                Console.WriteLine("Drive {0}", drive.Name);

                // Le type de lecteur (Removable,..)
                Console.WriteLine("  Drive type: {0}", drive.DriveType);

                // Si le lecteur est prêt.
                if (drive.IsReady)
                {
                    Console.WriteLine("  Volume label: {0}", drive.VolumeLabel);
                    Console.WriteLine("  File system: {0}", drive.DriveFormat);
                    Console.WriteLine(
                        "  Available space to current user:{0, 15} bytes",
                        drive.AvailableFreeSpace);

                    Console.WriteLine(
                        "  Total available space:          {0, 15} bytes",
                        drive.TotalFreeSpace);

                    Console.WriteLine(
                        "  Total size of drive:            {0, 15} bytes ",
                        drive.TotalSize);
                }
            } 
            Console.Read();
        }
    } 
}
Exécutez l'exemple: