Jak można z minimalnym nakładem pracy (używając istniejącego już obiektu, jeśli to możliwe) konwertować ścieżki takie jak c:\aaa\bbb\..\ccc
na c:\aaa\ccc
?Jak uzyskać bezwzględną lub znormalizowaną ścieżkę pliku w .NET?
Odpowiedz
Path.GetFullPath
być może?
Kanonizacja jest jednym z głównych obowiązków klasy Uri w .NET.
var path = @"c:\aaa\bbb\..\ccc";
var canonicalPath = new Uri(path).LocalPath; // c:\aaa\ccc
Zakładam więc, że ta kontrola rzeczywiście istnieje? – ashes999
Nie, klasa 'Uri' jest odpowiedzialna tylko za generowanie ścieżek. System, w którym te ścieżki są istotne, nie jest brany pod uwagę.Gdy uzyskasz ścieżkę za pomocą metody w mojej odpowiedzi, nadal musisz sprawdzić, czy istnieje za pośrednictwem klasy "Plik" (lub cokolwiek innego). – bdukes
Należy zauważyć, że nadal nie normalizuje się litera liter na dysku (np. "C: \" i "c: \" oba są niezmienione). Więc nie jest to tak naprawdę "kanoniczne" w sensie bycia wyjątkowym, w każdym razie. –
chciałbym napisać to tak:
public static string NormalizePath(string path)
{
return Path.GetFullPath(new Uri(path).LocalPath)
.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)
.ToUpperInvariant();
}
ten powinien obsługiwać kilka scenariuszy jak
uri i potencjał uciekł znaków w nim, jak
pliku : /// C: /Test%20Project.exe -> C: \ TEST PROJECT.EXE
segmenty ścieżki określonej przez kropki w celu określenia aktualnego lub nadrzędnego katalogu
c: \ aaa \ bbb \ .. \ ccc -> C: \ A A \ CCC
tylda skrócony (long) ścieżki
C: \ progra ~ 1 \ -> C: \ Program Files
niespójne separatora katalogu charakter
C:/Documents \ abc.txt -> C: \ Documents \ ABC.TXT
innych niż te, można go zignorować przypadek , ciąg dalszy \
znak ogranicznika katalogu itp.
Dobre i zwięzłe rozwiązanie problemu normalizacji ścieżki, dokładnie tego, czego szukałem. +1 – Syon
Nie używaj ToUpper() i znajomych dla dowolnego kodu, który chcesz przenosić. Na świecie są rozróżniane wielkości liter. Również nie jest tak dobrze, jeśli wyświetlasz te wartości użytkownikom, w którym to przypadku chcesz zachować wielkość liter i sortowanie bez użycia wielkości liter i porównania. W przeciwnym razie wygląda dobrze. – dhasenan
To zależy dokładnie od tego, co masz na myśli przez "kanoniczny", ale ponieważ system Windows traktuje ścieżki plików jako niewrażliwe na wielkość liter, twierdzę, że * musisz * potrzebować konwersji przypadku, w przeciwnym razie możliwe jest, aby istniała więcej niż jedna ścieżka "kanoniczna" dla tego samego pliku. Wolałbym jednak małe litery. – Andy
- 1. jak uzyskać ścieżkę bezwzględną dla pliku symlink?
- 2. Jak uzyskać bezwzględną ścieżkę do pliku w języku Python
- 3. Jak uzyskać bezwzględną ścieżkę pliku wejściowego w R
- 4. Uzyskaj bezwzględną ścieżkę pliku na zawartość
- 5. Jak uzyskać bezwzględną ścieżkę do pliku lub katalogu, która * nie * istnieje?
- 6. Jak uzyskać bezwzględną ścieżkę z pliku zależy na windows 32-bit lub 64-bit maszyna
- 7. Jak uzyskać bezwzględną ścieżkę zasobu w Rails 3?
- 8. Uzyskaj bezwzględną ścieżkę do aktualnie edytowanego pliku w Eclipse
- 9. git: Uzyskaj bezwzględną ścieżkę pliku w stosunku do repo
- 10. Jak uzyskać bezwzględną ścieżkę do katalogu instalacyjnego Eclipse?
- 11. Jak uzyskać czystą bezwzględną ścieżkę do pliku w Javie, niezależnie od systemu operacyjnego?
- 12. kątowe js templateUrl bezwzględną ścieżkę
- 13. Jak uzyskać ścieżkę pliku .ipa
- 14. jak uzyskać ścieżkę phyiscal usługi Windows za pomocą .net?
- 15. Jak uzyskać bezwzględną pozycję wierzchołka w pliku three.js?
- 16. Python: Znajdź bezwzględną ścieżkę importowanego modułu
- 17. Jak uzyskać bieżącą ścieżkę pliku w javascript
- 18. Szyny - Jak uzyskać ścieżkę pliku (nie ścieżkę URL) dla zasobów?
- 19. jak uzyskać załadowaną ścieżkę pliku konfiguracyjnego mongodb
- 20. Jak uzyskać ścieżkę rozwiązania w analizatorze kodu .NET
- 21. WebPACK i Nodejs izomorficzna wymagają bezwzględną ścieżkę
- 22. Jak przekonwertować ścieżkę względną na ścieżkę bezwzględną w aplikacji systemu Windows?
- 23. Jak uzyskać ścieżkę podstawową w jQuery?
- 24. Jak uzyskać pełną ścieżkę, podając nazwę pliku?
- 25. Jak wyłączyć lub zmienić ścieżkę pliku ghostdriver.log?
- 26. jak znaleźć pełną ścieżkę (bezwzględną) plik docelowego symbolicznego łącza lub miękkiej ogniwo pytona
- 27. Jak uzyskać bezwzględną ścieżkę w ASP netto podstawowej alternatywny sposób na Server.MapPath
- 28. Jak uzyskać bezwzględną ścieżkę dla "<img src=''>" w węźle z odpowiedzi.body
- 29. gcc/gdb: Jak umieścić bezwzględną ścieżkę do pliku źródłowego w informacji debugowania?
- 30. Jak określić bezwzględną ścieżkę do pliku źródłowego Java w dodatku Eclipse?
Nie wierzę, że to gwarantuje zwrócenie nazwy kanonicznej. Gwarantuje tylko, że zwrócona nazwa może być użyta do odniesienia się do pliku absolutnie vs. względnie – JaredPar
Path.GetFullPath (@ "c: \ aaa \ bbb \ .. \ ccc") = c: \ aaa \ ccc - wystarczająco dobre dla mnie. – mark
Prawidłowe, ale nie sprawdza, czy ścieżka jest prawidłowa. –