La validation de Chemin d'accès au Fichier w/Espaces en C#
Je suis quelque chose d'un n00b en C# et je vais avoir du mal à trouver une réponse à cela, donc s'il a déjà été répondu quelque part hésitez pas à vous moquer de moi (à condition de partager la solution). 🙂
Je suis en train de lire un fichier XML dans une interface graphique, forme, où certains éléments sont chemins vers les fichiers qui sont entrés dans la zone de texte des objets. Je suis en boucle à travers les contrôles sur le formulaire, et pour chaque chemin d'accès au fichier dans chaque zone de texte (lol il y a 20 d'entre eux sur cette forme), je veux utiliser le Fichier.Exists() pour s'assurer que c'est un fichier valide.
Le problème, c'est que le chemin d'accès au fichier peut contenir des espaces, et peut potentiellement être valide; cependant Fichier.Exists() me dit qu'il est invalide, entièrement basé sur les espaces. Évidemment, je ne peux pas coder en dur et faire quelque chose comme
if (File.Exists(@"c:\Path To Stuff"))
et j'ai essayé environnant les chemin avec ", comme
if (File.Exists("\"" + contentsOfTextBox + "\""))
mais ce n'est pas faire une différence. Est-il possible de faire cela? Puis-je échapper à la places en quelque sorte?
Je vous remercie pour votre temps. 🙂
Yup, je peux imprimer les chemins de l'amende juste, après qu'ils ont été lues à partir du XML. Les fichiers sont bien là.
OriginalL'auteur dmn | 2009-12-04
Vous devez vous connecter pour publier un commentaire.
Fichier.Existe fonctionne très bien avec des espaces. Il y a autre chose de vous donner un problème, je parie.
Assurez-vous que votre lecteur XML n'est pas faute de lire le nom de fichier (pièces de XML ne permettent pas d'espaces et de certains lecteurs lève une exception si elles rencontrent un).
Êtes-vous sûr que le fichier existe? Assurez-vous que vous utilisez le Répertoire.Si vous vous attendez à un nom de dossier.
Je viens de voir votre réponse plus bas. La seule autre chose que je peux penser à est de vos paramètres d'autorisations. À partir de la documentation: Si l'appelant n'a pas les autorisations suffisantes pour lire le fichier spécifié, aucune exception n'est levée et la méthode renvoie false indépendamment de l'existence d'un chemin.
OriginalL'auteur Ron Warholic
Ci-dessus pourrait être un répertoire pas un fichier!
Par conséquent, vous pouvez utiliser le Répertoire.Existe!
Si vous n'avez avoir un fichier sur la fin du chemin, alors vous devez utiliser le Fichier.Existe!
Merci Gregory; oui, c'était un mauvais exemple pour ma part, lol. C'est vraiment c:\Path Pour Stuff\file.txt. Je suppose que mon cerveau veut elle était encore en UNIX-terre où il ne sont généralement pas des extensions de fichier 🙂
OriginalL'auteur
Que la réponse dit, Fichier.Il existe des œuvres avec des espaces, si vous êtes à la vérification de l'existence d'un Répertoire toutefois, vous devriez être en utilisant le Répertoire.Existe
OriginalL'auteur Tim Ebenezer
Quelle est l'erreur exacte que vous obtenez lorsque
File.Exists
dit qu'il est invalide?Je suspect que vous êtes de passage à un chemin d'accès à un répertoire et non pas un fichier, qui sera de retour faux. Si donc, pour vérifier la présence d'un répertoire, utilisez Répertoire.Existe.
OriginalL'auteur adrianbanks
Écho Ron Warholic: assurez-vous que le processus des autorisations sur le dossier cible. J'ai juste couru dans le même "bug" et il s'est avéré être un problème d'autorisations.
OriginalL'auteur dznqbit
Avez-vous pensé à remplacer \ avec \\ ?
@"c:\Path To Stuff"
est un verbatim de la chaîne et ne nécessite pas de barres obliques inverses. Voir msdn.microsoft.com/en-us/library/aa691090%28VS.71%29.aspxIl n'est pas à l'aide de cette syntaxe dans le deuxième exemple.
Il n'est pas à l'aide de la syntaxe, mais le "\" ne sera pas échapper les caractères qu'ils sont déjà dans une variable.
Le 2ème exemple est vraiment ce que je fais face à. J'ai essayé de faire un remplacement de "\" par des "\\"; le remplacer était très bien, mais il n'a pas fait une différence. Dois-je faire quelque chose comme remplacez C:\ C:/?
En outre, le débogueur me montre que C# est déjà remplacé \ avec \\.
OriginalL'auteur Vivek
Vous devez utiliser youtStringValue.Trim() pour supprimer les espaces avant/après, et Remplacer pour supprimer les espaces dans la chaîne de caractères que vous ne souhaitez pas.
Aussi, plutôt d'utiliser le Système.IO.Chemin d'accès.Combiner plutôt de combiner ces chaînes.
Si, à partir de la zone de texte, l'utilisateur a entré des espaces qui n'était pas prévu, il peut être supprimé.
OriginalL'auteur Adriaan Stander
Vous pouvez utiliser @ sur les variables de chaîne:
Qui devrait résoudre tous les caractères d'échappement de problèmes parce que je ne pense pas que cela ressemble vraiment à les espaces le problème.
OriginalL'auteur Niklas Winde
salut, ce n'est pas difficile si vous pouvez convertir le nom du chemin d'accès à un tableau de chaîne puis de parcourir un par un et enlever les espaces
une fois que c'est fait il suffit d'écrire() à l'écran où vous avez les fichiers, si c'est le xml, puis votre xmlmapper suffira
fichier.exists() doit être utilisé que dans certaines circonstances, si vous savez qu'il existe mais pas quand il peut y avoir de l'espace de caractères ou de toute autre forme possible de la saisie de l'utilisateur
OriginalL'auteur jimmy p