Depuis quelque temps, je recherche une méthode Path.Combine qui fonctionne sur les URL. Ceci est similaire à Path.Combine for URLs? avec une grande différence.Path.Combine pour les URL (partie 2)
Je vais illustrer avec un exemple. Supposons que nous ayons un URL de base: http://example.com/somefolder
et un fichier: foo.txt
. Ainsi, le chemin complet serait: http://example.com/somefolder/foo.txt
. Cela semble simple, non? Ha. J'ai essayé la classe Uri: Uri.TryCreate(new Uri("http://example.com/somefolder"), "foo.txt", out x);
qui a abouti à "http://example.com/foo.txt"
.
Ensuite, j'ai essayé chemin: System.IO.Path.Combine("http://example.com/somefolder", "foo.txt");
qui a abouti à "http://example.com/somefolder\foo.txt"
... plus proche, mais toujours pas. Pour les coups de pied, j'ai alors essayé: System.IO.Path.Combine("http://example.com/somefolder/", "foo.txt")
qui s'est soldé par "http://example.com/somefolder/foo.txt"
.
Le dernier a fonctionné, mais il fait fondamentalement la concaténation de chaîne à ce point.
donc je pense avoir deux options:
- Utilisez Path.Combine et remplacer tous les \ avec/
- Utilisez concaténation de chaînes de base
Suis-je manque un construit dans la méthode de cadre ce?
MISE À JOUR: Le cas d'utilisation que j'ai est de télécharger un tas de fichiers. Mon code ressemble à ceci:
public void Download()
{
var folder = "http://example.com/somefolder";
var filenames = getFileNames(folder);
foreach (var name in filenames)
{
downloadFile(new Uri(folder + "/" + name));
}
}
Je suis vexé d'avoir à utiliser concat chaîne dans le constructeur Uri, ainsi avoir à vérifier si la barre est nécessaire (que j'omis dans le code).
Il me semble que ce que j'essaie de faire serait beaucoup, car la classe Uri gère beaucoup d'autres protocoles en plus de http.
En effet, j'ai parallélisé les téléchargements avec ForEach. Je l'ai juste coupé parce que ce n'était pas pertinent pour la question. Lien intéressant, cependant. Je vais vérifier et éventuellement changer la réponse acceptée. – Xcelled194
Quelle est la licence sous le code? puis-je l'utiliser sur mon code propriétaire? – Jack
Absolument. [Licence MIT] (http://choosealicense.com/licenses/mit/), donc c'est à peu près aussi permissif que possible. Vous ne pouvez pas me poursuivre en justice. :) –