Zastanawiam się tylko: szukam sposobu na sprawdzenie, czy podana ścieżka jest prawidłowa. (Uwaga: nie chcę sprawdzać, czy plik istnieje! Chcę tylko udowodnić poprawność ścieżki - więc jeśli plik może istnieć w tej lokalizacji) .
Problem w tym, że nie mogę znaleźć niczego w .Net API. Ze względu na wiele formatów i lokalizacji obsługiwanych przez system Windows, wolałbym raczej użyć czegoś natywnego dla MS.
Ponieważ funkcja powinna być w stanie sprawdzić:
- Względne ścieżki (./)
- Bezwzględne ścieżki (c: \ tmp)
- UNC-Pathes (\ some-pc \ c $)
- Ograniczenia NTFS, takie jak pełna ścieżka 1024 znaków - Jeśli się nie mylę, przekroczenie ścieżki spowoduje, że plik będzie niedostępny dla wielu wewnętrznych funkcji systemu Windows. Zmiana nazwy na Explorer nadal działa
- Ścieżki GUID woluminu: "\? \ Volume {GUID} \ somefile.foo
Czy ktoś ma taką funkcję?
Odpowiedzi:
Spróbuj
Uri.IsWellFormedUriString()
:Ciąg nie ma poprawnej zmiany znaczenia.
Ciąg jest absolutnym Uri, który reprezentuje niejawny plik Uri.
Ciąg jest bezwzględnym identyfikatorem URI, w którym brakuje ukośnika przed ścieżką.
Ciąg zawiera odwrotne ukośniki bez zmiany znaczenia, nawet jeśli są one traktowane jako ukośniki w przód.
Ciąg reprezentuje hierarchiczny bezwzględny Uri i nie zawiera „: //”.
Parser Uri.Scheme wskazuje, że oryginalny ciąg nie został poprawnie sformułowany.
źródło
@"foo\bar\baz"
, co jest całkowicie poprawną ścieżką względną ...Lub użyj FileInfo, zgodnie z sugestią w C #, sprawdź, czy nazwa pliku jest prawdopodobnie poprawna (a nie, że istnieje) .
źródło
źródło
Nie miałem żadnych problemów z poniższym kodem. (Względne ścieżki muszą zaczynać się od „/” lub „\”).
Na przykład te zwróciłyby fałsz:
A te zwrócą prawdę:
źródło
Możesz wypróbować ten kod:
Nie jestem pewien, czy obejmuje wszystkie przypadki ...
źródło
Najbliżej mi było próbować go stworzyć i zobaczyć, czy się powiedzie.
źródło
Jest tutaj wiele dobrych rozwiązań, ale ponieważ żadne z nich nie jest sprawdzane, czy ścieżka jest zakorzeniona w istniejącym dysku, oto kolejny:
To rozwiązanie nie uwzględnia ścieżek względnych.
źródło
Pobierz nieprawidłowe znaki z
System.IO.Path.GetInvalidPathChars();
i sprawdź, czy twój ciąg (ścieżka do katalogu) je zawiera, czy nie.źródło
Katalog istnieje?
źródło
źródło
Po prostu użyj
źródło
Możesz spróbować użyć Path.IsPathRooted () w połączeniu z Path.GetInvalidFileNameChars (), aby upewnić się, że ścieżka jest w połowie w porządku.
źródło