2016-07-03 12 views
8

Wie behandelt man Dateinamen in System.IO Klassen in einer plattformübergreifenden Weise, damit es unter Windows und Linux funktioniert?Cross-Plattform-Dateiname Handhabung in .NET Core

Zum Beispiel schreibe ich diesen Code, der perfekt auf Windows funktioniert, aber es nicht eine Datei auf Ubuntu Linux erstellen:

var tempFilename = [email protected]"..\Data\uploads\{filename}"; 
using (FileStream fs = System.IO.File.Create(tempFilename)) 
{ 
    file.CopyTo(fs); 
    fs.Flush();      
} 

Antwort

12

Windows mit Aufkantung. Linux mit Slash. Path.Combine das richtige Symbol:
Path.Combine Method - MSDN

+0

Gibt es irgendeine Art von automatischer Pfadkonvertierung ähnlich wie Qt, die ausschließlich Schrägstrich verwendet und sie in Backslash in Windows konvertiert? – Rem

+1

@Rem Müssen Sie sie konvertieren? Windows unterstützt im Allgemeinen auch Schrägstriche. – svick

+0

Wie Swick sagt, können Schrägstriche als Pfadtrennzeichen unter Windows verwendet werden (nur command.com und cmd.exe interpretieren Schrägstriche als etwas anderes) @Rem –

2

Sie können einfach Schrägstriche verwenden. Relative Pfade identisch arbeiten, und die absoluten Pfade können nur an die Wurzel des Hauptantriebes relativ sein (als absoluter Pfad der mit „c:“ ist nicht tragbar)

7

Sie könnten auch, wie unten Path.DirectorySeparatorChar verwenden:

Console.WriteLine("..{0}Data{0}uploads{0}{{filename}}", Path.DirectorySeparatorChar); 

Referenz: MSDN

0

Der ursprüngliche Beitrag ist mehr als ein Jahr alt, aber ich lief immer noch in dieser Ausgabe. Es scheint mir wie die Verwendung von Punkten in relativen Pfaden ist auch ein Problem.

Ein Pfad wie

".\\input\\mydata.csv" 

funktionierte gut auf Windows, aber nicht auf Unix. Wenn die Punktnotation für aktuelles Verzeichnis wechseln zu:

Path.GetFullPath(Directory.GetCurrentDirectory()) 

hatte ich mehr Erfolg.

Verwandte Themen