Saya memiliki metode ini untuk mengambil nama file dari string URI. Apa yang bisa saya lakukan untuk membuatnya lebih kuat?
private string GetFileName(string hrefLink)
{
string[] parts = hrefLink.Split('/');
string fileName = "";
if (parts.Length > 0)
fileName = parts[parts.Length - 1];
else
fileName = hrefLink;
return fileName;
}
http://www.test.com/file1.txt?a=b
akan menghasilkanfile1.txt?a=b
Uri.IsFile tidak berfungsi dengan url http. Ini hanya berfungsi untuk "file: //". Dari MSDN : "Properti IsFile benar ketika properti Scheme sama dengan UriSchemeFile." Jadi Anda tidak bisa bergantung pada itu.
sumber
Uri.IsFile
untuk menguji pada URL http / skema, Anda dapat berhasil mengekstrak nama file dari URL http menggunakanSystem.IO.Path.GetFileName(url);
Sebagian besar jawaban lain tidak lengkap atau tidak berurusan dengan hal-hal yang muncul setelah jalur (string kueri / hash).
Hasil tes:
sumber
GetFileNameFromUrl("test")
menghasilkan"test.xml"
Atau itu hanya salah ketik?Jawaban yang diterima bermasalah untuk url http. Selain itu
Uri.LocalPath
melakukan konversi khusus Windows, dan ketika seseorang menunjukkan meninggalkan string kueri di sana. Cara yang lebih baik adalah menggunakanUri.AbsolutePath
Cara yang benar untuk melakukan ini untuk url http adalah:
sumber
http://example.com/dir/hello%20world.txt
ini akan kembalihello%20world.txt
sedangkanUri.LocalPath
pendekatannya akan kembalihello world.txt
Saya pikir ini akan melakukan apa yang Anda butuhkan:
sumber
Uri.UnescapeDataString()
untuk mengubah% 20 dan + ke spasi).Ini mengasumsikan, tentu saja, bahwa Anda telah menguraikan nama file.
EDIT # 2:
Ini harus menangani spasi dan sejenisnya dalam nama file.
sumber
ini adalah sampel saya yang dapat Anda gunakan:
Pemakaian:
sumber
Sederhana dan lurus ke depan:
sumber