2016-03-31 11 views
0

Ich habe eine Konsolenanwendung in C# und ich möchte eine XML-Datei laden, der Pfad zur Datei wird über console.readline (). Aber ich möchte die Datei aus dem angegebenen Pfad laden, aber wenn der Benutzer nur den Namen der Datei angibt, möchte ich in dem lokalen Ordner, von dem aus die Anwendung ausgeführt wird, danach suchen. Wie kann ich wissen, wenn ich nur einen Dateinamen als Eingabe oder einen vollständigen Dateipfad bekomme. Ich schaffte das mit: var isFileNameOnly = ((xmlFilePath.IndexOf("\\")) == -1);wie zu überprüfen, ob eine Eingabe von der Konsole liest ist ein Dateiname oder eine Datei voller Pfad

Aber das ist hässlich und wahrscheinlich sehr Buggy.

Voll Code:

 var xmlFilePath = Console.ReadLine(); 
     var xmlFile = new XmlDocument(); 

     var isFileNameOnly = ((xmlFilePath.IndexOf("\\")) == -1); 
     try 
     { 
      if (isFileNameOnly) 
      { 
       xmlFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, xmlFilePath); 
      } 

      xmlFile.Load(xmlFilePath); 

     } 

Thx

Antwort

1

Sie überprüfen können, ob der Dateiname tatsächlich vom Benutzer eingegeben existiert mit exists() Methode. Wenn es wahr zurückgibt, lade die Datei.

File.Exists(xmlFilePath) 

Auch XmlDocument.Load(), wenn nur Namen, um die Datei in der Basedirectory-Datei zur Verfügung gestellt werden versuchen, sich selbst zu finden. Wenn also file.Exists() true zurückgibt, kann man davon ausgehen, dass XmlDocument.Load es laden wird, egal ob es sich um einen lokalen oder absoluten Pfad handelt.

+0

ja, aber, wenn ich versuche, die app von der Kommandozeile (cmd), die XmlDocument.Load() auszuführen, wird versuchen, das zu finden, Datei nicht in BaseDirectory, sondern in C: \ user \ myuser \, also muss ich wissen, ob es sich um eine Datei handelt, damit ich den BaseDirectory-Pfad an die Datei anhängen kann. Ich denke, wird das Basisverzeichnis anhängen und dann überprüfen, ob es existiert. thx – TBogdan

0

Dies wird return false:

bool isFolder = Path.IsPathRooted(@"Text.txt"); 

Diese wahre zurück:

bool isFolder = Path.IsPathRooted(@"C:\Text"); 
+0

Dies funktioniert nicht, wenn der Benutzer einen relativen Pfad angibt. –

0

Ihr Ansatz ist die gleiche, die ich gewählt hätte. Wenn der Parameter kein Verzeichnistrennzeichen enthält, muss es nur ein Dateiname sein. Vielleicht wäre es ein wenig mehr elegant sein, wenn Sie es so tun:

bool isFileNameOnly = !xmlFilePath.Contains(Path.DirectorySeparatorChar.ToString());