Sensible à la casse Répertoire.Existe / Fichier.Existe
Est-il un moyen d'avoir un casse Directory.Exists
/File.Exists
depuis
Directory.Exists(folderPath)
et
Directory.Exists(folderPath.ToLower())
fois de retour true
?
La plupart du temps, il n'a pas d'importance, mais je suis en utilisant une macro qui semble ne pas fonctionner si le chemin d'accès ne correspond pas à des cas 100%.
MSDN clairement noté ceci: "Le chemin de paramètre n'est pas sensible à la casse.", voir msdn.microsoft.com/en-us/library/...
Je sais, c'est pourquoi je pose la question...
Je sais, c'est pourquoi je pose la question...
OriginalL'auteur theknut | 2013-04-24
Vous devez vous connecter pour publier un commentaire.
Depuis Le Répertoire.Existe utilise FindFirstFile qui n'est pas sensible à la casse, pas de. Mais vous pouvez PInvoke FindFirstFileEx avec un additionalFlags paramètre FIND_FIRST_EX_CASE_SENSITIVE
Oui il faut faire, vous pouvez utiliser P/Invoke appeler Win32 en C#, lire sur les P/Invoke, puis cliquez sur le lien pour pinvoke.net
+1. @theknut, PInvoke lien vous donne des détails sur la façon de rendre exigible en C#/autres .Net languages.
Je l'ai essayé et ça ne fonctionne pas vraiment pour ma chaîne. Il est D:\Dir1\dir2\Dir3 (physique dir sur le lecteur est D:\Dir1\Dir2\Dir3). Lorsque j'essaie FindFirstFile il ne m'a Dir3. FindFirstFileEx(bla, FINDEX_INFO_LEVELS.FindExInfoBasic, findData, FINDEX_SEARCH_OPS.FindExSearchLimitToDirectories, IntPtr.Zéro, FIND_FIRST_EX_CASE_SENSITIVE);
Ne this aider? Si pas de poster votre code et essayer de comprendre ensemble.
OriginalL'auteur Jacob Seleznev
Basé sur la solution de cette question, j'ai écrit le code ci-dessous qui est sensible à la casse pour les tout le chemin à l'exception de la lettre au Lecteur sous Windows:
J'ai copié le code pour
GetWindowsPhysicalPath(string path)
de la questionNote le seul problème que j'ai trouvé avec cette fonction, la lettre de lecteur semble être toujours en minuscules. Exemple: Le chemin d'accès physique sur Windows:
D:\Test\test.txt
, leGetWindowsPhysicalPath(string path)
fonction renvoied:\Test\test.txt
[ThreadStatic]StringBuilder _builder=new StringBuilder(255);
et d'éviter ainsi que l'ajout d'une allocation à chaque appel. En fait.. en éliminant les allocations devraient être un peu plus grand changement que juste que... hm.OriginalL'auteur A-Sharabiani
Essayer cette fonction:
Mise à jour:
Comme indiqué dans les commentaires, ce seul cas dans le nom de fichier, pas dans le chemin. C'est parce que GetFullPath méthode ne retourne pas de la Windows chemin d'origine avec l'original des cas, mais une copie de la trajectoire à partir du paramètre.
Ex:
Toutes les méthodes que j'ai essayé de travailler de la même façon: Fileinfo, DirectoryInfo.
Voici une solution à l'aide d'un kernel32.dll méthode:
Il fonctionne ici: Si vous avez "c:\temp\TEST.txt', FileExistsCaseSensitive(@"c:\temp\test.txt") retournera false
C'est de travailler pour moi. (testé sur plate-forme windows)
Problème avec cela est, c'est seulement sensible à la casse pour le nom du fichier, pas pour tout le chemin. Exemple: Test de la méthode avec
c:\tEst\test.txt
etc:\test\test.txt
, tandis que le chemin réel sur Windows:c:\Test\test.txt
, fois de retourtrue
. J'sauf à la fois pour revenirfalse
(respect de la casse pour le chemin d'accès complet).La droite. Je n'utilise que la partie du nom de fichier. De toute façon, j'ai mis à jour la réponse avec une solution de travail.
OriginalL'auteur Eric Bole-Feysot
Essayer ces 2 options plus simples qui n'ont pas besoin d'utiliser PInvoke et retour nullable Booléen (bool?). Je ne suis pas un spécialiste en la matière donc je ne sais si c'est le code le plus efficace, mais cela fonctionne pour moi.
Il suffit de passer un chemin d'accès et si le résultat est nul (HasValue = false) aucune correspondance n'est trouvée, si le résultat est faux il y a une correspondance exacte, sinon si c'est vrai il y a un match avec une différence de cas.
Les méthodes GetFiles, GetDirectories et GetDrives tous les restituer les cas enregistré sur votre système de fichiers, vous pouvez utiliser un cas sensible à la méthode de comparaison.
NB: pour le cas où le chemin est une exacte dans le lecteur (par exemple, @"C:\"), je dois utiliser une approche légèrement différente.
OriginalL'auteur Glen
Si la (relative ou absolue) chemin d'accès de votre fichier est:
Suivantes s'assure que le fichier existe et a le bon boîtier:
Profitez-en!
OriginalL'auteur Simon Mattes