Saya hanya bertanya-tanya: Saya sedang mencari cara untuk memvalidasi jika jalur yang diberikan valid. (Catatan: Saya tidak ingin memeriksa apakah ada file! Saya hanya ingin membuktikan keabsahan jalur - Jadi jika file mungkin ada di lokasi) .
Masalahnya, saya tidak dapat menemukan apa pun di .Net API. Karena banyaknya format dan lokasi yang didukung Windows, saya lebih suka menggunakan sesuatu yang asli MS.
Karena fungsi tersebut harus dapat memeriksa:
- Jalur Relatif (./)
- Jalur Mutlak (c: \ tmp)
- Jalur UNC (\ some-pc \ c $)
- NTFS-Batasan seperti jalur lengkap 1024 karakter - Jika saya tidak salah melebihi jalur akan membuat file tidak dapat diakses untuk banyak fungsi Windows internal. Mengganti nama dengan Explorer masih berfungsi
- Jalur GUID Volume: "\? \ Volume {GUID} \ somefile.foo
Apakah ada yang punya fungsi seperti ini?
Jawaban:
Coba
Uri.IsWellFormedUriString()
:String tidak lolos dengan benar.
String adalah Uri absolut yang merepresentasikan file Uri implisit.
String adalah URI absolut yang tidak memiliki garis miring sebelum jalur.
String tersebut berisi garis miring terbalik yang tidak dapat lolos meskipun diperlakukan sebagai garis miring ke depan.
String mewakili Uri absolut hierarkis dan tidak berisi ": //".
Parser untuk Uri.Scheme menunjukkan bahwa string asli tidak dibentuk dengan baik.
sumber
@"foo\bar\baz"
, yang merupakan jalur relatif yang benar-benar valid ...Atau gunakan FileInfo seperti yang disarankan dalam In C # periksa bahwa nama file mungkin valid (bukan yang ada) .
sumber
sumber
Saya tidak mengalami masalah dengan kode di bawah ini. (Jalur relatif harus dimulai dengan '/' atau '\').
Misalnya, ini akan mengembalikan false:
Dan ini akan kembali benar:
sumber
Anda dapat mencoba kode ini:
Saya tidak yakin itu mencakup semua kasus ...
sumber
Yang paling dekat saya datang adalah dengan mencoba membuatnya, dan melihat apakah itu berhasil.
sumber
Ada banyak solusi bagus di sini, tetapi karena tidak ada yang memeriksa apakah jalurnya di-root pada drive yang ada, inilah yang lain:
Solusi ini tidak memperhitungkan jalur relatif.
sumber
Dapatkan karakter yang tidak valid dari
System.IO.Path.GetInvalidPathChars();
dan periksa apakah string Anda (jalur Direktori) berisi karakter tersebut atau tidak.sumber
Directory.Exists?
sumber
sumber
Cukup Gunakan
sumber
Anda bisa mencoba menggunakan Path.IsPathRooted () dalam kombinasi dengan Path.GetInvalidFileNameChars () untuk memastikan jalurnya sudah setengah jalan.
sumber