Apakah ada metode untuk memeriksa apakah jalur yang diberikan adalah jalur lengkap? Sekarang saya melakukan ini:
if (template.Contains(":\\")) //full path already given
{
}
else //calculate the path from local assembly
{
}
Tapi pasti ada cara yang lebih elegan untuk memeriksa ini?
c#
.net
validation
path
hs2d
sumber
sumber
IsPathRooted
: menghindari mengakses sistem file atau memberikan pengecualian untuk input yang tidak valid.IsPathRooted
, tentu saja tidak ada yang signifikan. TheGetFullPath
garis termasuk sehingga jalan sedang dievaluasi dapat diamatiKondisi diatas:
false
dalam banyak kasus di mana formatpath
tidak valid (daripada melempar pengecualian)true
hanya jikapath
menyertakan volumeDalam skenario seperti yang diajukan OP, oleh karena itu mungkin lebih cocok daripada kondisi pada jawaban sebelumnya. Berbeda dengan kondisi diatas:
path == System.IO.Path.GetFullPath(path)
melempar pengecualian daripada kembalifalse
dalam skenario ini:System.IO.Path.IsPathRooted(path)
kembalitrue
jikapath
dimulai dengan pemisah direktori tunggal.Terakhir, berikut adalah metode yang membungkus kondisi di atas dan juga menutup kemungkinan pengecualian yang tersisa:
EDIT: EM0 membuat komentar yang bagus dan jawaban alternatif yang menangani kasus aneh jalur seperti
C:
danC:dir
. Untuk membantu memutuskan bagaimana Anda mungkin ingin menangani jalur tersebut, Anda mungkin ingin mempelajari MSDN -> aplikasi desktop Windows -> Kembangkan -> Teknologi desktop -> Akses dan Penyimpanan Data -> Sistem File Lokal - -> Manajemen File -> Tentang Manajemen File -> Membuat, Menghapus, dan Memelihara File -> Menamai File, Jalur, dan Namespaces -> Jalur Berkualifikasi Penuh vs. Relatifsumber
Mencoba
Bekerja untuk jalur UNC serta jalur lokal.
Misalnya
sumber
Pertanyaan lama, tapi satu jawaban lagi yang bisa diterapkan. Jika Anda perlu memastikan volume disertakan dalam jalur lokal, Anda dapat menggunakan System.IO.Path.GetFullPath () seperti ini:
sumber
GetFullPath
mengakses sistem file dan dapat memberikan sejumlah kemungkinan pengecualian. Lihat jawaban saya ( stackoverflow.com/a/35046453/704808 ) untuk alternatif yang masih memastikan jalur lengkap.Membangun jawaban weir : ini tidak menampilkan jalur yang tidak valid, tetapi juga mengembalikan
false
untuk jalur seperti "C:", "C: dirname" dan "\ path".Perhatikan bahwa ini mengembalikan hasil yang berbeda pada Windows dan Linux, misalnya "/ path" adalah absolut di Linux, tetapi tidak di Windows.
Tes unit:
sumber
Untuk memeriksa apakah jalur sepenuhnya memenuhi syarat (MSDN) :
Ini sedikit lebih sederhana daripada yang telah diusulkan, dan masih mengembalikan false untuk jalur relatif-drive seperti
C:foo
. Logikanya didasarkan langsung pada definisi MSDN "berkualifikasi penuh", dan saya belum menemukan contoh perilaku yang tidak semestinya.Namun yang menarik, .NET Core 2.1 tampaknya memiliki metode baru
Path.IsPathFullyQualified
yang menggunakan metode internalPathInternal.IsPartiallyQualified
(lokasi tautan akurat pada 2018-04-17).Untuk anak cucu dan penahanan diri yang lebih baik dari posting ini, inilah implementasi yang terakhir untuk referensi:
sumber
Ini adalah solusi yang saya gunakan
Ini bekerja dengan cara berikut:
sumber
C:\foo\..\foo
atauC:\foo\.\.\.
Panggil fungsi berikut:
Dok MSDN: Metode Path.IsPathFullyQualified
Kutipan berguna dari dokumen MSDN berikut:
sumber
Saya tidak begitu yakin apa yang Anda maksud dengan jalur lengkap (meskipun dengan asumsi dari contoh yang Anda maksud non-relatif dari root dan seterusnya), nah, Anda dapat menggunakan kelas Path untuk membantu Anda dalam bekerja dengan jalur sistem file fisik, yang harus mencakup Anda untuk sebagian besar kemungkinan.
sumber