Aller au contenu

Programmation C sharp/Les fichiers

Un livre de Wikilivres.

Cette page est considérée comme une ébauche à compléter . Si vous possédez quelques connaissances sur le sujet, vous pouvez les partager en éditant dès à présent cette page (en cliquant sur le lien « modifier »).

Ressources suggérées : Programmation C sharp/Bibliographie et liens

Programmation C#
Programmation C#
Modifier ce modèle

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à.

La méthode Delete permet de supprimer un fichier ou un répertoire :

public static void Delete(string path);

Les méthodes suivantes donnent ou modifient les informations sur le fichier ou le répertoire donné en paramètre.

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:\

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; }