Programmation C sharp/Les fichiers
Un fichier permet de stocker des données sur un support physique de stockage (disque dur, disquette, clé USB, ...). Les fichiers sont regroupés dans des répertoires.
L'espace de nom System.IO
contient les classes permettant de gérer les fichiers et les répertoires.
Les classes File
et Directory
[modifier | modifier le wikicode]Ces classes possèdent les méthodes de gestion des fichiers et des répertoires (respectivement). Elles sont toutes statiques.
Ces deux classes possèdent plusieurs méthodes communes.
Tester si un fichier ou un répertoire existe
[modifier | modifier le wikicode]La méthode Exists
permet de tester si un chemin désigne un fichier ou un répertoire existant :
public static bool Exists(string path);
Exemple :
Console.WriteLine( File.Exists( "C:\monfichier.txt" ) ? "Le fichier existe." : "Le fichier n'existe pas" ); Console.WriteLine( Directory.Exists( "C:\WINDOWS" ) ? "Le répertoire existe." : "Le répertoire n'existe pas" );
Si la méthode appelée est celle de la classe File et que le chemin désigne un répertoire plutôt qu'un fichier (ou vice versa), cette méthode retournera également false
.
Déplacer un fichier ou un répertoire
[modifier | modifier le wikicode]La méthode Move
permet de déplacer un fichier ou un répertoire dans un autre répertoire, tout en le renommant :
public static void Move(string sourceName, string destName);
Exemple :
File.Move("C:\monfichier.txt", "C:\Documents\essai.txt");
Copier un fichier
[modifier | modifier le wikicode]La méthode Copy
de la classe File
permet de copier le contenu d'un fichier dans un autre :
public static void Copy(string sourceFileName, string destFileName[, bool overwrite]);
Le paramètre overwrite
de type booléen indique si le fichier destination doit être écrasé s'il existe déjà.
Suppression
[modifier | modifier le wikicode]La méthode Delete
permet de supprimer un fichier ou un répertoire :
public static void Delete(string path);
Informations
[modifier | modifier le wikicode]Les méthodes suivantes donnent ou modifient les informations sur le fichier ou le répertoire donné en paramètre.
Dates
[modifier | modifier le wikicode]public static DateTime GetCreationTime(string path); public static DateTime GetCreationTimeUtc(string path);
Ces méthodes retournent respectivement :
- la date et l'heure de création (heure locale)
- la date et l'heure de création (UTC)
public static DateTime GetLastAccessTime(string path); public static DateTime GetLastAccessTimeUtc(string path);
Ces méthodes retournent respectivement :
- la date et l'heure du dernier accès (heure locale)
- la date et l'heure du dernier accès (UTC)
public static DateTime GetLastWriteTime(string path); public static DateTime GetLastWriteTimeUtc(string path);
Ces méthodes retournent respectivement :
- la date et l'heure de modification (heure locale)
- la date et l'heure de modification (UTC)
public static void SetCreationTime(string path, DateTime creationTime); public static void SetCreationTimeUtc(string path, DateTime creationTimeUtc);
Ces méthodes modifient respectivement :
- la date et l'heure de création (heure locale)
- la date et l'heure de création (UTC)
public static void SetLastAccessTime(string path, DateTime lastAccessTime); public static void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc);
Ces méthodes modifient respectivement :
- la date et l'heure du dernier accès (heure locale)
- la date et l'heure du dernier accès (UTC)
public static void SetLastWriteTime(string path, DateTime lastWriteTime); public static void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc);
Ces méthodes modifient respectivement :
- la date et l'heure de modification (heure locale)
- la date et l'heure de modification (UTC)
Contrôle d'accès
[modifier | modifier le wikicode]// classe File public static FileSecurity GetAccessControl(string path, [ AccessControlSections includeSections ] );
Cette méthode retourne les informations de sécurité d'un fichier.
// classe Directory public static DirectorySecurity GetAccessControl(string path, [ AccessControlSections includeSections ] );
Cette méthode retourne les informations de sécurité d'un répertoire.
// classe File public static void SetAccessControl(string path, FileSecurity fileSecurity);
Cette méthode modifie les informations de sécurité d'un fichier.
// classe Directory public static void SetAccessControl(string path, DirectorySecurity directorySecurity);
Cette méthode modifie les informations de sécurité d'un répertoire.
Les classes FileSecurity
, DirectorySecurity
et AccessControlSections
sont définies dans l'espace de nom System.Security.AccessControl
.
Attributs d'un fichier
[modifier | modifier le wikicode]La classe File
possède deux méthodes pour la gestion des attributs de fichiers :
public static FileAttributes GetAttributes(string path);
Cette méthode retourne les attributs du fichier.
public static void SetAttributes(string path, FileAttributes fileAttributes);
Cette méthode modifie les attributs du fichier.
L'énumération FileAttributes
contient les éléments suivants :
Directory
: le chemin désigne un répertoire.Normal
: le fichier est normal.Archive
: le fichier peut être archivé.Hidden
: le fichier est caché.ReadOnly
: le fichier est en lecture seule.System
: le fichier est un fichier système.Compressed
: le fichier est compressé (NTFS).Encrypted
: le fichier est crypté (NTFS).Device
NotContentIndexed
Offline
ReparsePoint
SparseFile
Temporary
: le fichier est temporaire.
Répertoire courant
[modifier | modifier le wikicode]Les deux méthodes suivants sont définies dans la classe Directory
. Le répertoire courant désigne le répertoire à partir duquel sont définis les fichiers et répertoires désignés par un chemin relatif.
public static string GetCurrentDirectory();
Cette méthode retourne le chemin du répertoire courant de l'application.
public static void SetCurrentDirectory(string path);
Cette méthode défini le chemin du nouveau répertoire courant de l'application.
Les classes FileInfo
et DirectoryInfo
[modifier | modifier le wikicode]Une instance de la classe FileInfo
(resp. DirectoryInfo
) représente un fichier (resp. un répertoire), c'est à dire correspond à un chemin donné.
Ces classes permettent les mêmes fonctionnalités que celles vues précédemment, en utilisant des méthodes d'instances. Il n'y a qu'un seul constructeur qui prend comme paramètre le chemin du fichier ou répertoire.
Exemple :
FileInfo file = new FileInfo( @"C:\Documents\Projets\Images\Photo252.jpg" );
// Rappel : une chaîne verbatim ( @"..." ) évite de doubler les anti-slashs
DirectoryInfo dir = file.Directory; // -> C:\Documents\Projets\Images\
dir = dir.Parent; // -> C:\Documents\Projets\
dir = dir.Root; // -> C:\
Propriétés
[modifier | modifier le wikicode]Les deux classes ont les propriétés communes suivantes :
// Nom et extension :
public string Name { virtual get; }
public string Extension { get; }
public string FullName { virtual get; }
// Test d'existence, et attributs
public bool Exists { virtual get; }
public FileAttributes Attributes { get; set; }
// Dates et heures (création, accès et écriture), locales et UTC :
public DateTime CreationTime { get; set; }
public DateTime CreationTimeUtc { get; set; }
public DateTime LastAccessTime { get; set; }
public DateTime LastAccessTimeUtc { get; set; }
public DateTime LastWriteTime { get; set; }
public DateTime LastWriteTimeUtc { get; set; }
La classe FileInfo
a les propriétés spécifiques suivantes :
// Test lecture seule et taille du fichier (octets) :
public bool IsReadOnly { get; set; }
public long Length { get; }
// Répertoire parent (objet, chemin) :
public DirectoryInfo Directory { get; }
public string DirectoryName { get; }
La classe DirectoryInfo
a les propriétés spécifiques suivantes :
// Répertoires parent et racine :
public DirectoryInfo Parent { get; }
public DirectoryInfo Root { get; }