Case sensitive-Verzeichnis.Existiert / - Datei.Existiert
Gibt es einen Weg, um zwischen groß-und Kleinschreibung Directory.Exists
/File.Exists
seit
Directory.Exists(folderPath)
und
Directory.Exists(folderPath.ToLower())
beide zurück true
?
Meisten der Zeit ist es egal, aber ich bin mit einem makro, das scheint nicht zu funktionieren, wenn der Pfad nicht mit Fällen 100%.
- MSDN klar festgestellt: "Der path-parameter ist nicht case-sensitive.", siehe msdn.microsoft.com/en-us/library/...
- Ich weiß, das ist, warum ich Frage...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit-Verzeichnis.Existiert, verwendet FindFirstFile die groß- /Kleinschreibung nicht, Nein. Aber Sie können PInvoke FindFirstFileEx mit einem additionalFlags parameter FIND_FIRST_EX_CASE_SENSITIVE
bla
gleich?bla = "D:\Dir1\Dir2\Dir3"
aber das Verzeichnis auf meiner Festplatte ist"D:\Dir1\dir2\Dir3"
. Das ist, warum ich brauchen, um Sie miteinander vergleichen zu Fällen.lpFileName="D:\\"
sollte Es wieder "Dir1","dir2" und "Dir3". Bitte bestätigen Sie, wenn das der Fall istBasiert auf der Lösung von diese Frage, schrieb ich den folgenden code die groß - /Kleinschreibung ist für die ganzen Weg außer der Windows-Laufwerksbuchstabe:
Kopierte ich den code für
GetWindowsPhysicalPath(string path)
aus die FrageHinweis das einzige problem fand ich mit dieser Funktion wird der Laufwerksbuchstabe scheint immer in Kleinbuchstaben. Beispiel: Der physikalische Pfad auf Windows:
D:\Test\test.txt
, dieGetWindowsPhysicalPath(string path)
Funktion gibtd:\Test\test.txt
[ThreadStatic]StringBuilder _builder=new StringBuilder(255);
und dadurch vermeiden Sie das hinzufügen einer Zuordnung zu jedem Anruf. Eigentlich.. den Wegfall der Zuweisungen wäre eine etwas größere Veränderung, als nur das... hm.Versuchen, diese Funktion:
Update:
Wie gesagt in den Kommentaren, diese überprüfen nur die Fälle, in Dateinamen, nicht den Pfad. Dies ist, weil die GetFullPath-Methode nicht wieder die Windows-original-Pfad mit original-Fällen, sondern eine Kopie der Pfad aus dem parameter.
Ex:
Alle Methoden, die ich versuchte auf die gleiche Weise arbeiten: Fileinfo, DirectoryInfo.
Hier ist eine Lösung mit einem kernel32.dll Methode:
c:\tEst\test.txt
undc:\test\test.txt
, während der echte Pfad auf Windows:c:\Test\test.txt
beide zurücktrue
. Ich außer beide zurückfalse
(groß-und Kleinschreibung für den gesamten Pfad).Versuchen Sie, diese 2 einfachere Möglichkeiten, die Sie nicht verwenden müssen PInvoke und zurück eine null-Boolean (bool?). Ich bin kein Fach-Experte, damit ich weiß, ob dies der effizienteste code, aber es funktioniert für mich.
Pass einfach in einen Pfad, und wenn das Ergebnis null ist (HasValue = false) keine übereinstimmung gefunden wird, wenn das Ergebnis false es ist eine exakte übereinstimmung, ansonsten, wenn es wahr ist, ein match mit einem Unterschied Fall.
Methoden GetFiles, GetDirectories und GetDrives alle Rückkehr der genaue Fall als gespeichert auf Ihrem Datei-system, so können Sie zwischen groß-und Kleinschreibung Methode vergleichen.
NB: für den Fall, wo der Pfad eine genaue Laufwerk (z.B. @"C:\"), ich habe mit einem etwas anderen Ansatz.
Wenn die (relativen oder absoluten) Pfad der Datei ist:
Folgenden wird sichergestellt, dass die Datei existiert und hat die richtige groß - /Kleinschreibung:
Genießen!