2016-03-21 3 views
1

Ich bemerkte, dass mein Code Dateien in falsche Ordner schreibt, so fügte ich einige Protokollierung hinzu und das Ergebnis erstaunt mich. Mein Code:Möglicher Grund von Path.Combine einen der Parameter auslassen

string savePath = Path.Combine(mapping.Folder, fileMeta.RelativePath, fileMeta.Filename); 
logger.Info(mapping.Folder); 
logger.Info(fileMeta.RelativePath); 
logger.Info(fileMeta.Filename); 
logger.Info("savepath: {0}", savePath); 

Dies ist, was geschrieben wurde, protokollieren:

C:\Sync 
\0100_MACHINES 
Layout US.pdf 
savepath: \0100_MACHINES\Layout US.pdf 

Kann jemand geben möglicher Grund, warum Path.Combine erste Argument lässt und kombiniert nur zweite und dritte? Was auch komisch ist, das ist nur auf einer Maschine passiert.

Antwort

0

Der zweite Parameter beginnt mit einem Backslash-Zeichen. Dies hat Path.Combine veranlasst, den Teil vorher wegzulassen. Löste dieses Problem durch TrimStart Zugabe:

string savePath = Path.Combine(mapping.Folder, 
        fileMeta.RelativePath.TrimStart('\\'), 
        fileMeta.Filename.TrimStart('\\')); 
0

Wenn path2 enthält keine Wurzel (zum Beispiel, wenn path2 nicht mit einem Trennzeichen nicht startet oder eine Antriebs Spezifikation), das Ergebnis ist eine Verkettung der beiden Pfade, mit einem dazwischen liegenden Trennzeichen. Wenn Pfad2 einen Stamm enthält, wird Pfad2 zurückgegeben. https://msdn.microsoft.com/en-us/library/dd784047(v=vs.110).aspx

scheint, wie C# wird relativ Ordner als Wurzelpfad zu behandeln, so path1 ignorierend.