Répertoire.CreateDirectory ne fonctionne pas

Je suis entrain de créer une application à l'aide de C# 2010 dont le but est de copier les fichiers qui ont une extension spécifiée. Il utilise .NET Framework 3.5 .

J'ai le morceau de code suivant:

    private void GetFiles()
    {
        bool validext;
        foreach (string filePath in Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories))
        {
            //Check if the file has a specified extension
            validext = false;
            foreach (string extension in ext)
                if (HasExtension(filePath, extension))
                {
                    validext = true;
                    break;
                }

            if ((validext && mode == 1) || (!validext && mode == 2))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(filePath));
                to_copy.Add(filePath);
            }
        }
        totalcount = to_copy.Count;
    }

Le problème est sur cette commande:

Directory.CreateDirectory(TrimFile(filePath));

Qu'il ne soulève pas une exception, le chemin d'accès au répertoire de créer est valide et l'application s'exécute avec des privilèges d'administrateur. Néanmoins, le répertoire n'est pas créé. Une recherche sur internet ne me donne pas toutes les réponses, donc ma question est:

Pourquoi est Directory.CreateDirectory(TrimFile(filePath)); pas de travail?

EDIT: j'ai remplacé le FileTrim fonction avec Path.GetDirectoryName(filePath) .

  • Vous pouvez poster à la sortie de TrimFile(filePath) s'il vous plaît.
  • Quel est le but de TrimFile? Pouvez-vous nous montrer ce que le contenu de la chaîne de chemin a été avant et après TrimFile? Je suppose que c'est là votre problème se trouve
  • Voir ici: stackoverflow.com/questions/888228/...
  • Exemple pour TrimFile: Entrée: C:\Users\VladIulian\Downloads\Visual Studio LightSwitch 2011 (x86) - DVD (en anglais)\VSLS.exe Sortie: C:\Users\VladIulian\Downloads\Visual Studio LightSwitch 2011 (x86) - DVD (en anglais)
  • J'étais conscient de ce post, mais Microsoft est dit ce qui suit: Scénario 2: Vous ne pouvez pas trouver le fichier ou le dossier que vous avez créé Lorsque vous utilisez une application pour laquelle la virtualisation est activée, vous créez des fichiers de données dans des emplacements virtualisables du système de fichiers. Lorsque vous utilisez une autre application ou l'Explorateur Windows pour accéder à ces fichiers nouvellement créés, vous ne pouvez pas les trouver. Par exemple, si vous enregistrez un fichier dans une application d'édition de photos dans le répertoire %programfiles%, %systemroot% %systemdrive% ou %programdata% des dossiers, vous ne trouvez pas ce fichier.
  • J'ai utiliser des chemins d'accès complets, donc il ne devrait pas s'appliquer. Si je me trompe merci de me corriger. Merci.
  • 1. Vous essayez de créer un répertoire qui existe déjà. 2. Vous pouvez utiliser Path.GetDirectoryName(filePath) au lieu TrimFile.
  • merci pour le numéro 2, je n'étais pas au courant. Je l'ai remplacé dans le code mais ça ne fonctionne toujours pas. Je n'essaie pas de créer un répertoire qui existe déjà.
  • Ici est un exemple. Dans la première itération de boucle permet de dire que vous avez filePath = "C:\dir\abc.txt" plus tard, vous parage nom de fichier dans le chemin d'accès et d'essayer de créer le répertoire de "C:\dir\" mais vous l'avez déjà répertoire et dans ce répertoire existe fichier.
  • mais, pour cela, créer le répertoire avec le premier fichier. Aussi, autant que je sache, Annuaire.CreateDirectory ne pas déclencher un événement si le répertoire spécifié existe déjà.
  • OUI. vous essayez de créer un répertoire qui existe déjà. Dire que votre chemin est C:\Users\blah\VSLS.exe, comme @Reniuz mentionné Path.GetDirectoryName(filePath) ou de votre soi-disant TrimFile() sera de retour C:\Users\blah. Donc, Fondamentalement, vous appelez Directory.CreateDirectory("C:\Users\blah"), ce qui signifie que vous essayez de créer un répertoire existant
  • ok ajouter if(!Directory.Exists(Path.GetDirectoryName(filePath))) avant Directory.CreateDirectory() et vous verrez que vous ne saisissez si l'instruction
  • C'est étonnamment correct ... N'ont rien à voir avec cela? support.microsoft.com/kb/927387/EN-US Si oui, comment puis-je réparer / faire les répertoires visible? Merci!