J'ai cette méthode pour saisir le nom de fichier à partir d'un URI de chaîne. Que puis-je faire pour le rendre plus robuste?
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
se traduira parfile1.txt?a=b
Uri.IsFile ne fonctionne pas avec les URL http. Cela ne fonctionne que pour "file: //". De MSDN : "La propriété IsFile est vraie lorsque la propriété Scheme est égale à UriSchemeFile." Vous ne pouvez donc pas dépendre de cela.
la source
Uri.IsFile
pour tester sur une URL / un schéma http, vous pouvez extraire avec succès le nom de fichier à partir d'une URL http en utilisantSystem.IO.Path.GetFileName(url);
La plupart des autres réponses sont soit incomplètes, soit ne traitent pas de choses venant après le chemin (chaîne de requête / hachage).
Résultats de test:
la source
GetFileNameFromUrl("test")
résultat"test.xml"
Ou est-ce juste une faute de frappe?La réponse acceptée est problématique pour les URL http. De
Uri.LocalPath
plus, les conversions spécifiques à Windows, et comme quelqu'un l'a souligné, y laissent des chaînes de requête. Une meilleure façon est d'utiliserUri.AbsolutePath
La bonne façon de procéder pour les URL http est:
la source
http://example.com/dir/hello%20world.txt
celle-ci, le retour seraithello%20world.txt
alors que l'Uri.LocalPath
approche reviendraithello world.txt
Je pense que cela fera ce dont vous avez besoin:
la source
Uri.UnescapeDataString()
pour changer% 20 et + en espaces).Cela suppose, bien sûr, que vous avez analysé le nom du fichier.
EDIT # 2:
Cela devrait gérer les espaces et autres dans le nom de fichier.
la source
voici mon échantillon que vous pouvez utiliser:
Usage:
la source
Simple et direct:
la source