Mam tę metodę pobierania nazwy pliku z identyfikatora URI ciągu. Co mogę zrobić, aby był bardziej wytrzymały?
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
spowodujefile1.txt?a=b
Uri.IsFile nie działa z adresami URL http. Działa tylko w przypadku „file: //”. From MSDN : „Właściwość IsFile jest prawdziwa, gdy właściwość Schemat jest równa UriSchemeFile.” Więc nie możesz na tym polegać.
źródło
Uri.IsFile
do testowania adresu URL / schematu http, można skutecznie wyodrębnić nazwę pliku z adresu URL http, używającSystem.IO.Path.GetFileName(url);
Większość innych odpowiedzi jest niekompletna lub nie dotyczy rzeczy następujących po ścieżce (ciąg zapytania / skrót).
Wyniki testu:
źródło
GetFileNameFromUrl("test")
spowodować,"test.xml"
czy jest to tylko literówka?Przyjęta odpowiedź jest problematyczna dla adresów URL http. Ponadto
Uri.LocalPath
dokonuje konwersji specyficznych dla systemu Windows i, jak ktoś zauważył, pozostawia tam ciągi zapytań. Lepszym sposobem jest użycieUri.AbsolutePath
Prawidłowy sposób to zrobić dla adresów URL http:
źródło
http://example.com/dir/hello%20world.txt
ten sposób, zwracane byłyby takiehello%20world.txt
sameUri.LocalPath
metodyhello world.txt
Myślę, że zrobi to, czego potrzebujesz:
źródło
Uri.UnescapeDataString()
zmienioną wartość (użyj, aby zmienić% 20 i + na spacje).To oczywiście zakłada, że parsowałeś nazwę pliku.
EDYCJA 2:
To powinno obsługiwać spacje i tym podobne w nazwie pliku.
źródło
to moja próbka, której możesz użyć:
Stosowanie:
źródło
Prosty i bezpośredni:
źródło