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 lieuTrimFile
. - 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-disantTrimFile()
sera de retourC:\Users\blah
. Donc, Fondamentalement, vous appelezDirectory.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)))
avantDirectory.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!
Vous devez vous connecter pour publier un commentaire.
Permet de "debug" code
De sorte que la vérité est que votre CreateDirectory appel est inutile, car vous avez déjà une boucle sur les fichiers existants dans les annuaires. À moins de créer permet de dire que dans tous les répertoires, de nouveaux sous-répertoire "Temp", puis vous avez besoin pour ce faire:
Après cela, vous obtiendrez
C:\some\kind\of\directory\Temp
répertoire créé.Pour copier le fichier dans le répertoire que vous devez faire ceci:
Après ce répertoire
C:\My\directory\of\file\copies
sera créé s'il n'existait pas avant et un fichier avec le même nom sera copié il.Directory.CreateDirectory(Path.GetDirectoryName(filePath).Replace(SourcePath, DestinationPath));
.J'ai récemment tombé sur ce point aussi, et je suis bête, je n'ai pas de bétonnage le droit chemin, c'était donc de la création du répertoire j'ai bétonné... à l'intérieur de la
VSProjects/ProjectName/bin/Debug/
:'DAvant:
Après:
Doh! Espérons que cela aide. Juste assurez-vous que vous êtes en train de créer avec le absolue route.