Ich habe diese Methode zum Abrufen des Dateinamens von einem String-URI. Was kann ich tun, um es robuster zu machen?
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
wird infile1.txt?a=b
Uri.IsFile funktioniert nicht mit http-URLs. Es funktioniert nur für "file: //". Aus MSDN : "Die IsFile-Eigenschaft ist wahr, wenn die Scheme-Eigenschaft gleich UriSchemeFile ist." Darauf kann man sich also nicht verlassen.
quelle
Uri.IsFile
zum Testen einer http-URL / eines http-Schemas verwenden können, können Sie den Dateinamen erfolgreich aus einer http-URL extrahieren, indem SieSystem.IO.Path.GetFileName(url);
Die meisten anderen Antworten sind entweder unvollständig oder befassen sich nicht mit Dingen, die nach dem Pfad kommen (Abfragezeichenfolge / Hash).
Testergebnisse:
quelle
GetFileNameFromUrl("test")
führen"test.xml"
? Oder ist das nur ein Tippfehler?Die akzeptierte Antwort ist für http-URLs problematisch. Darüber hinaus werden
Uri.LocalPath
Windows-spezifische Konvertierungen durchgeführt, und wie bereits erwähnt, bleiben dort Abfragezeichenfolgen. Ein besserer Weg ist zu verwendenUri.AbsolutePath
Der richtige Weg, dies für http-URLs zu tun, ist:
quelle
http://example.com/dir/hello%20world.txt
diese zurückkehren würde,hello%20world.txt
während derUri.LocalPath
Ansatz zurückkehren würdehello world.txt
Ich denke, das wird tun, was Sie brauchen:
quelle
Uri.UnescapeDataString()
, um% 20 und + in Leerzeichen zu ändern).Dies setzt natürlich voraus, dass Sie den Dateinamen analysiert haben.
EDIT # 2:
Dies sollte Leerzeichen und dergleichen im Dateinamen behandeln.
quelle
Dies ist mein Beispiel, das Sie verwenden können:
Verwendung:
quelle
Einfach und unkompliziert:
quelle