Seit einiger Zeit suche ich nach einer Path.Combine-Methode, die auf URLs funktioniert. Dies ist vergleichbar mit Path.Combine for URLs? mit einem großen Unterschied.Path.Combine für URLs (Teil 2)
Ich werde mit einem Beispiel veranschaulichen. Angenommen, wir haben eine Basis-URL: http://example.com/somefolder
und eine Datei: foo.txt
. Somit wäre der vollständige Pfad: http://example.com/somefolder/foo.txt
. Klingt einfach, oder? Ha.
Ich versuchte die Uri-Klasse: Uri.TryCreate(new Uri("http://example.com/somefolder"), "foo.txt", out x);
, die "http://example.com/foo.txt"
ergab.
Dann versuchte ich Pfad: System.IO.Path.Combine("http://example.com/somefolder", "foo.txt");
, was in "http://example.com/somefolder\foo.txt"
ergab ... Näher, aber immer noch nicht.
Für Tritte habe ich dann versucht: System.IO.Path.Combine("http://example.com/somefolder/", "foo.txt")
, die "http://example.com/somefolder/foo.txt"
ergab.
Die letzte funktionierte, aber es ist im Grunde String-Verkettung an diesem Punkt.
Also ich denke, ich habe zwei Möglichkeiten:
- Verwenden Path.Combine und ersetzen Sie alle \ mit/
- Verwenden Grund String-Verkettung
Bin ich ein fehlt im Rahmen Methode gebaut für Dies?
UPDATE: Der Anwendungsfall, den ich habe, ist zum Herunterladen einer Reihe von Dateien. Mein Code sieht wie folgt aus:
public void Download()
{
var folder = "http://example.com/somefolder";
var filenames = getFileNames(folder);
foreach (var name in filenames)
{
downloadFile(new Uri(folder + "/" + name));
}
}
Ich bin verstimmt an, die Zeichenfolge Concat in Uri-Konstruktor zu verwenden, als auch mit überprüfen, ob der Schrägstrich benötigt wird (was ich im Code weggelassen).
Es scheint mir, dass was ich versuche zu tun, würde viel kommen, da die Uri-Klasse eine Menge anderer Protokolle außer http behandelt.
Tatsächlich habe ich die Downloads mit ForEach parallelisiert. Ich habe es nur gekürzt, weil es für die Frage nicht relevant war. Interessanter Link. Ich werde es überprüfen und möglicherweise die angenommene Antwort ändern. – Xcelled194
In welcher Lizenz ist der Code enthalten? kann ich es auf meinem proprietären Code verwenden? – Jack
Absolut. [MIT-Lizenz] (http://choosealicense.com/licenses/mit/), also ist es ungefähr so freizügig wie es nur geht. Du kannst mich einfach nicht verklagen. :) –