Maison > développement back-end > C++ > Comment puis-je traiter les fichiers en toute sécurité dans une structure de répertoire tout en ignorant les exceptions refusées d'accès en C #?

Comment puis-je traiter les fichiers en toute sécurité dans une structure de répertoire tout en ignorant les exceptions refusées d'accès en C #?

Linda Hamilton
Libérer: 2025-01-27 23:01:11
original
643 Les gens l'ont consulté

How Can I Safely Process Files in a Directory Structure While Ignoring Access Denied Exceptions in C#?

Utilisez Directory.GetFiles() pour parcourir les répertoires en toute sécurité

Lorsque vous parcourez des répertoires à l'aide de C#, il est courant de rencontrer des exceptions d'accès refusé en raison de dossiers protégés. Pour éviter que ces exceptions n'interrompent votre programme, explorons comment ignorer gracieusement les répertoires inaccessibles et continuer à traiter les fichiers accessibles.

Défi

La méthode standard utilisant Directory.GetFiles() lèvera soudainement une exception lorsqu'elle rencontrera un dossier inaccessible, arrêtant tout traitement ultérieur.

Solution récursive

Au lieu de vous fier au paramètre AllDirectories, qui lève une exception, implémentez la récursivité manuellement. Cela implique de parcourir un répertoire à la fois, d'essayer d'accéder à ses fichiers et d'explorer de manière récursive tous les sous-répertoires.

using System;
using System.IO;

public static class Program
{
    public static void Main()
    {
        string path = ""; // 获取目录路径
        ProcessAllFiles(path, ProcessFile);
    }

    private static void ProcessFile(string path) { /* 在此处添加文件处理代码。 */ }

    private static void ProcessAllFiles(string folder, Action<string> fileAction)
    {
        try
        {
            foreach (string file in Directory.GetFiles(folder))
            {
                fileAction(file);
            }

            foreach (string subDir in Directory.GetDirectories(folder))
            {
                ProcessAllFiles(subDir, fileAction);
            }
        }
        catch (Exception ex)
        {
            // 处理或忽略异常(例如,将其记录下来以便日后查看)。  考虑记录异常类型和路径信息。
            Console.WriteLine($"Error processing directory '{folder}': {ex.Message}");
        }
    }
}
Copier après la connexion

Ce code explore de manière itérative la structure des répertoires, en ignorant les dossiers inaccessibles et en continuant avec les fichiers accessibles. Le bloc catch peut être personnalisé pour avaler l'exception ou effectuer une gestion personnalisée, telle que sa journalisation. Le code amélioré comprend un bloc try-catch pour gérer toutes les exceptions pouvant survenir et imprimer un message d'erreur comprenant le message d'exception et le chemin du dossier où l'erreur s'est produite.

Conclusion

En implémentant une récursivité personnalisée, nous pouvons ignorer les exceptions d'accès refusé et continuer à accéder aux fichiers dans la structure de répertoires. Cela permet une gestion des fichiers plus robuste et plus conviviale, même lorsqu'il s'agit de dossiers protégés ou inaccessibles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal