C# Language
Fichier et flux I / O
Recherche…
Introduction
Gère les fichiers.
Syntaxe
-
new System.IO.StreamWriter(string path)
-
new System.IO.StreamWriter(string path, bool append)
-
System.IO.StreamWriter.WriteLine(string text)
-
System.IO.StreamWriter.WriteAsync(string text)
-
System.IO.Stream.Close()
-
System.IO.File.ReadAllText(string path)
-
System.IO.File.ReadAllLines(string path)
-
System.IO.File.ReadLines(string path)
-
System.IO.File.WriteAllText(string path, string text)
-
System.IO.File.WriteAllLines(string path, IEnumerable<string> contents)
-
System.IO.File.Copy(string source, string dest)
-
System.IO.File.Create(string path)
-
System.IO.File.Delete(string path)
-
System.IO.File.Move(string source, string dest)
-
System.IO.Directory.GetFiles(string path)
Paramètres
Paramètre | Détails |
---|---|
chemin | L'emplacement du fichier. |
ajouter | Si le fichier existe, true ajoutera des données à la fin du fichier (append), false remplacera le fichier. |
texte | Texte à écrire ou à stocker. |
Contenu | Une collection de chaînes à écrire. |
la source | L'emplacement du fichier que vous souhaitez utiliser. |
dest | L'emplacement auquel vous voulez qu'un fichier accède. |
Remarques
- Veillez toujours à fermer les objets
Stream
. Cela peut être fait avec un enusing
le bloc comme indiqué ci - dessus ou en appelant manuellementmyStream.Close()
. - Assurez-vous que l'utilisateur actuel dispose des autorisations nécessaires sur le chemin que vous essayez de créer.
- Les chaînes verbatim doivent être utilisées lors de la déclaration d'une chaîne de chemin comprenant des barres obliques inverses, comme ceci:
@"C:\MyFolder\MyFile.txt"
Lecture d'un fichier à l'aide de la classe System.IO.File
Vous pouvez utiliser la fonction System.IO.File.ReadAllText pour lire le contenu entier d'un fichier dans une chaîne.
string text = System.IO.File.ReadAllText(@"C:\MyFolder\MyTextFile.txt");
Vous pouvez également lire un fichier sous la forme d'un tableau de lignes à l'aide de la fonction System.IO.File.ReadAllLines :
string[] lines = System.IO.File.ReadAllLines(@"C:\MyFolder\MyTextFile.txt");
Écriture de lignes dans un fichier à l'aide de la classe System.IO.StreamWriter
La classe System.IO.StreamWriter :
Implémente un TextWriter pour écrire des caractères dans un flux dans un codage particulier.
En utilisant la méthode WriteLine
, vous pouvez écrire du contenu ligne par ligne dans un fichier.
Notez l'utilisation du mot-clé using
qui garantit que l'objet StreamWriter est éliminé dès qu'il est hors de portée et donc le fichier est fermé.
string[] lines = { "My first string", "My second string", "and even a third string" };
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt"))
{
foreach (string line in lines)
{
sw.WriteLine(line);
}
}
Notez que StreamWriter peut recevoir un second paramètre bool
dans son constructeur, ce qui permet d' Append
un fichier au lieu de remplacer le fichier:
bool appendExistingFile = true;
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt", appendExistingFile ))
{
sw.WriteLine("This line will be appended to the existing file");
}
Écriture dans un fichier à l'aide de la classe System.IO.File
Vous pouvez utiliser la fonction System.IO.File.WriteAllText pour écrire une chaîne dans un fichier.
string text = "String that will be stored in the file";
System.IO.File.WriteAllText(@"C:\MyFolder\OutputFile.txt", text);
Vous pouvez également utiliser la fonction System.IO.File.WriteAllLines qui reçoit un IEnumerable<String>
comme second paramètre (par opposition à une seule chaîne dans l'exemple précédent). Cela vous permet d'écrire du contenu à partir d'un tableau de lignes.
string[] lines = { "My first string", "My second string", "and even a third string" };
System.IO.File.WriteAllLines(@"C:\MyFolder\OutputFile.txt", lines);
Lentement lire un fichier ligne par ligne via un IEnumerable
Lorsque vous travaillez avec des fichiers volumineux, vous pouvez utiliser la méthode System.IO.File.ReadLines
pour lire toutes les lignes d'un fichier dans une IEnumerable<string>
. Ceci est similaire à System.IO.File.ReadAllLines
, sauf qu’il ne charge pas tout le fichier en mémoire en même temps, ce qui le rend plus efficace lorsque vous travaillez avec des fichiers volumineux.
IEnumerable<string> AllLines = File.ReadLines("file_name.txt", Encoding.Default);
Le deuxième paramètre de File.ReadLines est facultatif. Vous pouvez l'utiliser lorsque cela est nécessaire pour spécifier l'encodage.
Il est important de noter qu'appeler ToArray
, ToList
ou une autre fonction similaire forcera toutes les lignes à être chargées en une fois, ce qui signifie que les avantages de l'utilisation de ReadLines
sont annulés. Il est préférable d'énumérer sur IEnumerable
utilisant une boucle foreach
ou LINQ si vous utilisez cette méthode.
Créer un fichier
Classe statique de fichier
En utilisant la méthode Create
de la classe statique File
, nous pouvons créer des fichiers. Méthode crée le fichier sur le chemin donné, en même temps, il ouvre le fichier et nous donne le FileStream
du fichier. Assurez-vous de fermer le fichier lorsque vous en avez terminé.
ex1:
var fileStream1 = File.Create("samplePath");
/// you can write to the fileStream1
fileStream1.Close();
ex2:
using(var fileStream1 = File.Create("samplePath"))
{
/// you can write to the fileStream1
}
ex3:
File.Create("samplePath").Close();
Classe FileStream
Il y a beaucoup de surcharges de ce constructeur de classes, ce qui est bien documenté ici . L'exemple ci-dessous concerne celui qui couvre les fonctionnalités les plus utilisées de cette classe.
var fileStream2 = new FileStream("samplePath", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
Vous pouvez vérifier les énumérations pour FileMode , FileAccess et FileShare à partir de ces liens. Ce qu'ils signifient essentiellement sont les suivants:
FileMode: Réponses "Le fichier doit-il être créé? Ouvert? Créer s'il n'existe pas alors ouvert?" un peu de questions.
FileAccess: Réponses "Dois-je pouvoir lire le fichier, écrire dans le fichier ou les deux?" un peu de questions.
FileShare: Réponses "Les autres utilisateurs devraient-ils pouvoir lire, écrire, etc. sur le fichier alors que je l'utilise simultanément?" un peu de questions.
Copier un fichier
Classe statique de fichier
File
classe statique de File
peut être facilement utilisée à cette fin.
File.Copy(@"sourcePath\abc.txt", @"destinationPath\abc.txt");
File.Copy(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");
Remarque: Par cette méthode, le fichier est copié, ce qui signifie qu'il sera lu à partir de la source, puis écrit dans le chemin de destination. Ce processus consomme beaucoup de ressources, sa durée est relativement longue et votre programme peut se bloquer si vous n'utilisez pas de threads.
Déplacer un fichier
Classe statique de fichier
La classe statique de fichier peut facilement être utilisée à cette fin.
File.Move(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");
Remarque 1: Change uniquement l’index du fichier (si le fichier est déplacé dans le même volume). Cette opération ne prend pas de temps relatif à la taille du fichier.
Remarque 2: Impossible de remplacer un fichier existant sur le chemin de destination.
Supprimer le fichier
string path = @"c:\path\to\file.txt";
File.Delete(path);
Bien que Delete
ne Delete
pas d'exception si le fichier n'existe pas, il lancera une exception, par exemple si le chemin spécifié n'est pas valide ou si l'appelant ne dispose pas des autorisations requises. Vous devez toujours placer les appels à Delete
dans le bloc try-catch et gérer toutes les exceptions attendues. En cas de conditions de concurrence possibles, encapsulez la logique dans la déclaration de verrouillage .
Fichiers et répertoires
Obtenir tous les fichiers dans le répertoire
var FileSearchRes = Directory.GetFiles(@Path, "*.*", SearchOption.AllDirectories);
Retourne un tableau de FileInfo
, représentant tous les fichiers du répertoire spécifié.
Obtenir des fichiers avec une extension spécifique
var FileSearchRes = Directory.GetFiles(@Path, "*.pdf", SearchOption.AllDirectories);
Retourne un tableau de FileInfo
, représentant tous les fichiers du répertoire spécifié avec l'extension spécifiée.
Async écrire du texte dans un fichier à l'aide de StreamWriter
// filename is a string with the full path
// true is to append
using (System.IO.StreamWriter file = new System.IO.StreamWriter(filename, true))
{
// Can write either a string or char array
await file.WriteAsync(text);
}