Czy istnieje metoda sprawdzenia, czy podana ścieżka jest pełną ścieżką? Teraz robię to:
if (template.Contains(":\\")) //full path already given
{
}
else //calculate the path from local assembly
{
}
Ale czy musi być bardziej elegancki sposób na sprawdzenie tego?
c#
.net
validation
path
hs2d
źródło
źródło
IsPathRooted
: unikania dostępu do systemu plików lub zgłaszania wyjątków w przypadku nieprawidłowych danych wejściowych.IsPathRooted
pewnością nie była to nic znaczącego.GetFullPath
Linia została włączona tak, że ścieżka jest oceniany można zaobserwowaćPowyższy warunek:
false
w większości przypadków, gdy formatpath
jest nieprawidłowy (zamiast zgłaszać wyjątek)true
tylko wtedy, gdypath
zawiera objętośćW scenariuszach takich jak ten, który przedstawił PO, może zatem być bardziej odpowiedni niż warunki z wcześniejszych odpowiedzi. W przeciwieństwie do powyższego warunku:
path == System.IO.Path.GetFullPath(path)
zgłasza wyjątki zamiast zwracaćfalse
w następujących scenariuszach:System.IO.Path.IsPathRooted(path)
zwraca,true
jeślipath
zaczyna się od pojedynczego separatora katalogu.Wreszcie, oto metoda, która obejmuje powyższy warunek, a także wyklucza pozostałe możliwe wyjątki:
EDYCJA: EM0 zrobił dobry komentarz i alternatywną odpowiedź, odnosząc się do ciekawego przypadku ścieżek takich jak
C:
iC:dir
. Aby pomóc zdecydować, w jaki sposób chcesz obsłużyć takie ścieżki, możesz zagłębić się w MSDN -> Aplikacje klasyczne Windows -> Programowanie -> Technologie komputerowe -> Dostęp do danych i przechowywanie -> Lokalne systemy plików - -> Zarządzanie plikami -> Informacje o zarządzaniu plikami -> Tworzenie, usuwanie i konserwacja plików -> Nazywanie plików, ścieżek i przestrzeni nazw -> W pełni kwalifikowane a względne ścieżkiźródło
Próbować
Działa zarówno dla ścieżek UNC, jak i lokalnych.
Na przykład
źródło
Stare pytanie, ale jeszcze jedna odpowiednia odpowiedź. Jeśli chcesz upewnić się, że wolumin jest uwzględniony w ścieżce lokalnej, możesz użyć System.IO.Path.GetFullPath () w następujący sposób:
źródło
GetFullPath
uzyskuje dostęp do systemu plików i może zgłosić kilka możliwych wyjątków. Zobacz moją odpowiedź ( stackoverflow.com/a/35046453/704808 ), aby znaleźć alternatywę, która nadal zapewnia pełną ścieżkę.Opierając się na odpowiedzi jazu : nie powoduje to zgłaszania nieprawidłowych ścieżek, ale zwraca również
false
ścieżki, takie jak „C:”, „C: dirname” i „\ path”.Zwróć uwagę, że zwraca to różne wyniki w systemach Windows i Linux, np. „/ Path” jest bezwzględne w systemie Linux, ale nie w systemie Windows.
Test jednostkowy:
źródło
Aby sprawdzić, czy ścieżka jest w pełni kwalifikowana (MSDN) :
Jest to nieco prostsze niż to, co zostało już zaproponowane, i nadal zwraca wartość false dla ścieżek względem dysku, takich jak
C:foo
. Jego logika jest oparta bezpośrednio na definicji „w pełni kwalifikowanej” w MSDN i nie znalazłem żadnych przykładów, na których źle się zachowuje.Co ciekawe, wydaje się, że .NET Core 2.1 ma nową metodę,
Path.IsPathFullyQualified
która wykorzystuje metodę wewnętrznąPathInternal.IsPartiallyQualified
(lokalizacja linków jest dokładna na 17.04.2018).Dla potomności i lepszego samowystarczalności tego posta, oto implementacja tego ostatniego w celach informacyjnych:
źródło
To jest rozwiązanie, którego używam
Działa to w następujący sposób:
źródło
C:\foo\..\foo
lubC:\foo\.\.\.
Wywołaj następującą funkcję:
Dokument MSDN: Metoda Path.IsPathFullyQualified
Oto przydatny cytat z dokumentu MSDN:
źródło
Nie jestem do końca pewien, co masz na myśli przez pełną ścieżkę (chociaż zakładając z przykładu, że masz na myśli nie względną od korzenia), możesz użyć klasy Path, aby pomóc ci w pracy ze ścieżkami fizycznego systemu plików, które powinny obejmować w większości przypadków.
źródło