Partage de technologie

Compréhension approfondie des opérations d'E/S du système de fichiers en C#

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Les opérations d’E/S du système de fichiers constituent une partie importante de tout langage de programmation, et C# ne fait pas exception. Qu'il s'agisse de lire et d'écrire des fichiers, de gérer des répertoires ou de traiter des flux de fichiers, C# fournit une bibliothèque de classes riche et puissante pour implémenter ces fonctions. Cet article présentera en détail les opérations d’E/S du système de fichiers en C# et montrera comment gérer efficacement les fichiers et les répertoires à travers des exemples de code.

1. Lire et écrire des fichiers
écrire un fichier

En C#, vous pouvez utiliserSystem.IOsous l'espace de nomsFileClasse pour effectuer des opérations d’écriture de fichiers.

Exemple:

  1. using System;
  2. using System.IO;
  3. class Program
  4. {
  5. static void Main()
  6. {
  7. string path = "example.txt";
  8. string content = "这是一个示例文本。";
  9. // 写入文件
  10. File.WriteAllText(path, content);
  11. Console.WriteLine("文件写入成功。");
  12. }
  13. }
lire le fichier

De même, on peut aussi utiliserFileClasse pour lire le contenu du fichier :

  1. using System;
  2. using System.IO;
  3. class Program
  4. {
  5. static void Main()
  6. {
  7. string path = "example.txt";
  8. if (File.Exists(path))
  9. {
  10. // 读取文件内容
  11. string content = File.ReadAllText(path);
  12. Console.WriteLine("文件内容:");
  13. Console.WriteLine(content);
  14. }
  15. else
  16. {
  17. Console.WriteLine("文件不存在。");
  18. }
  19. }
  20. }
2. Utilisez des flux de fichiers

Les flux de fichiers offrent un moyen plus flexible de lire et d'écrire des fichiers, notamment lors du traitement de fichiers volumineux, les flux de fichiers peuvent lire et écrire des données octet par octet, évitant ainsi une utilisation excessive de la mémoire.

utiliserFileStreamécrire un fichier
  1. using System;
  2. using System.IO;
  3. class Program
  4. {
  5. static void Main()
  6. {
  7. string path = "filestream_example.txt";
  8. byte[] data = System.Text.Encoding.UTF8.GetBytes("通过FileStream写入的数据。");
  9. using (FileStream fs = new FileStream(path, FileMode.Create))
  10. {
  11. fs.Write(data, 0, data.Length);
  12. Console.WriteLine("数据已通过FileStream写入。");
  13. }
  14. }
  15. }
utiliserFileStreamlire le fichier
  1. using System;
  2. using System.IO;
  3. class Program
  4. {
  5. static void Main()
  6. {
  7. string path = "filestream_example.txt";
  8. using (FileStream fs = new FileStream(path, FileMode.Open))
  9. {
  10. byte[] data = new byte[fs.Length];
  11. fs.Read(data, 0, data.Length);
  12. string content = System.Text.Encoding.UTF8.GetString(data);
  13. Console.WriteLine("通过FileStream读取的内容:");
  14. Console.WriteLine(content);
  15. }
  16. }
  17. }
3. Répertoire des opérations
Créer un répertoire

En C#, vous pouvez utiliserDirectoryclasse pour créer un répertoire :

  1. using System;
  2. using System.IO;
  3. class Program
  4. {
  5. static void Main()
  6. {
  7. string dirPath = "example_directory";
  8. if (!Directory.Exists(dirPath))
  9. {
  10. Directory.CreateDirectory(dirPath);
  11. Console.WriteLine("目录创建成功。");
  12. }
  13. else
  14. {
  15. Console.WriteLine("目录已存在。");
  16. }
  17. }
  18. }
supprimer le répertoire

peut utiliserDirectoryClasse pour supprimer un répertoire :

  1. using System;
  2. using System.IO;
  3. class Program
  4. {
  5. static void Main()
  6. {
  7. string dirPath = "example_directory";
  8. if (Directory.Exists(dirPath))
  9. {
  10. Directory.Delete(dirPath, true);
  11. Console.WriteLine("目录已删除。");
  12. }
  13. else
  14. {
  15. Console.WriteLine("目录不存在。");
  16. }
  17. }
  18. }
4. Parcourez les fichiers et les répertoires
Obtenir une liste de fichiers dans un répertoire

peut utiliserDirectoryLa classe obtient la liste des fichiers dans le répertoire spécifié :

  1. using System;
  2. using System.IO;
  3. class Program
  4. {
  5. static void Main()
  6. {
  7. string dirPath = "example_directory";
  8. if (Directory.Exists(dirPath))
  9. {
  10. string[] files = Directory.GetFiles(dirPath);
  11. Console.WriteLine("目录中的文件:");
  12. foreach (string file in files)
  13. {
  14. Console.WriteLine(file);
  15. }
  16. }
  17. else
  18. {
  19. Console.WriteLine("目录不存在。");
  20. }
  21. }
  22. }
Parcourir les répertoires de manière récursive

Tous les fichiers d'un répertoire et de ses sous-répertoires peuvent être parcourus à l'aide d'un algorithme récursif :

  1. using System;
  2. using System.IO;
  3. class Program
  4. {
  5. static void Main()
  6. {
  7. string dirPath = "example_directory";
  8. if (Directory.Exists(dirPath))
  9. {
  10. TraverseDirectory(dirPath);
  11. }
  12. else
  13. {
  14. Console.WriteLine("目录不存在。");
  15. }
  16. }
  17. static void TraverseDirectory(string dirPath)
  18. {
  19. string[] files = Directory.GetFiles(dirPath);
  20. string[] directories = Directory.GetDirectories(dirPath);
  21. foreach (string file in files)
  22. {
  23. Console.WriteLine("文件: " + file);
  24. }
  25. foreach (string directory in directories)
  26. {
  27. Console.WriteLine("目录: " + directory);
  28. TraverseDirectory(directory); // 递归遍历子目录
  29. }
  30. }
  31. }
5. Opérations sur les attributs de fichier

Dans les opérations du système de fichiers, la lecture et la définition des attributs de fichier sont une exigence courante. C# fournitFileInfoclasse pour implémenter cette fonctionnalité.

Lire les attributs du fichier
  1. using System;
  2. using System.IO;
  3. class Program
  4. {
  5. static void Main()
  6. {
  7. string filePath = "example.txt";
  8. FileInfo fileInfo = new FileInfo(filePath);
  9. if (fileInfo.Exists)
  10. {
  11. Console.WriteLine("文件名: " + fileInfo.Name);
  12. Console.WriteLine("文件路径: " + fileInfo.FullName);
  13. Console.WriteLine("文件大小: " + fileInfo.Length);
  14. Console.WriteLine("创建时间: " + fileInfo.CreationTime);
  15. Console.WriteLine("最后访问时间: " + fileInfo.LastAccessTime);
  16. Console.WriteLine("最后修改时间: " + fileInfo.LastWriteTime);
  17. }
  18. else
  19. {
  20. Console.WriteLine("文件不存在。");
  21. }
  22. }
  23. }
Définir les propriétés du fichier
  1. using System;
  2. using System.IO;
  3. class Program
  4. {
  5. static void Main()
  6. {
  7. string filePath = "example.txt";
  8. FileInfo fileInfo = new FileInfo(filePath);
  9. if (fileInfo.Exists)
  10. {
  11. // 设置文件属性
  12. fileInfo.Attributes = FileAttributes.ReadOnly;
  13. Console.WriteLine("文件属性已设置为只读。");
  14. // 恢复文件属性
  15. fileInfo.Attributes = FileAttributes.Normal;
  16. Console.WriteLine("文件属性已恢复为正常。");
  17. }
  18. else
  19. {
  20. Console.WriteLine("文件不存在。");
  21. }
  22. }
  23. }
6. Opérations d'E/S de fichiers asynchrones

L'utilisation de méthodes asynchrones peut améliorer la réactivité de votre application lorsque vous travaillez avec des fichiers volumineux ou effectuez des opérations fastidieuses sur les fichiers. C# fournit des méthodes asynchrones pour lire et écrire des fichiers.

Écrire des fichiers de manière asynchrone
  1. using System;
  2. using System.IO;
  3. using System.Threading.Tasks;
  4. class Program
  5. {
  6. static async Task Main()
  7. {
  8. string path = "async_example.txt";
  9. string content = "这是一个异步写入示例。";
  10. await File.WriteAllTextAsync(path, content);
  11. Console.WriteLine("文件异步写入成功。");
  12. }
  13. }
Lire des fichiers de manière asynchrone
  1. using System;
  2. using System.IO;
  3. using System.Threading.Tasks;
  4. class Program
  5. {
  6. static async Task Main()
  7. {
  8. string path = "async_example.txt";
  9. if (File.Exists(path))
  10. {
  11. string content = await File.ReadAllTextAsync(path);
  12. Console.WriteLine("文件内容:");
  13. Console.WriteLine(content);
  14. }
  15. else
  16. {
  17. Console.WriteLine("文件不存在。");
  18. }
  19. }
  20. }
7. Surveillance des fichiers

C# fournitFileSystemWatcher Classe permettant de surveiller les modifications apportées aux fichiers ou aux répertoires dans un répertoire spécifié. Ceci est utile dans les applications qui doivent répondre aux modifications du système de fichiers.

utiliserFileSystemWatcherSurveiller les modifications des fichiers
  1. using System;
  2. using System.IO;
  3. class Program
  4. {
  5. static void Main()
  6. {
  7. string path = "example_directory";
  8. if (!Directory.Exists(path))
  9. {
  10. Directory.CreateDirectory(path);
  11. }
  12. FileSystemWatcher watcher = new FileSystemWatcher();
  13. watcher.Path = path;
  14. watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.Size;
  15. watcher.Filter = "*.*";
  16. watcher.Changed += OnChanged;
  17. watcher.Created += OnChanged;
  18. watcher.Deleted += OnChanged;
  19. watcher.Renamed += OnRenamed;
  20. watcher.EnableRaisingEvents = true;
  21. Console.WriteLine("正在监视目录: " + path);
  22. Console.WriteLine("按任意键退出...");
  23. Console.ReadKey();
  24. }
  25. private static void OnChanged(object source, FileSystemEventArgs e)
  26. {
  27. Console.WriteLine($"文件: {e.FullPath} {e.ChangeType}");
  28. }
  29. private static void OnRenamed(object source, RenamedEventArgs e)
  30. {
  31. Console.WriteLine($"文件: {e.OldFullPath} 重命名为 {e.FullPath}");
  32. }
  33. }

J'espère que ce contenu vous sera utile, merci d'avoir lu !