2011-01-19 13 views
8

Possiedo un programma della riga di comando che accetta un parametro di configurazione come parametro, ovvero C: \ myprogram.exe -c C: \ configFiles \ MyConfigFile.txt. Voglio essere in grado di fare in modo che io non devo digitare il percorso assoluto al file di configurazione, così invece di quanto sopra posso basta inserire C: \ myprogram.exe -c MyConfigFile.txtPercorso relativo a un file utilizzando C#

Non ho familiarità con come C# si occupa di percorsi per capire se e come questo può essere fatto. Qualsiasi intuizione è apprezzata.

+0

possibile duplicato di [Come convertire un percorso relativo in un percorso completo in C#/.NET?] (Http://stackoverflow.com/questions/2162292/how-do-i-convert-a-relative -path-to-a-fully-qualified-path-in-c-net) – finnw

risposta

12

Usa Path.GetFullPath()

Qualcosa di simile:

string path = "MyConfigFile.txt"; 
string fullPath = System.IO.Path.GetFullPath(path); 

Questo è se il file di configurazione si trova nella directory corrente. Se sono memorizzati in una cartella standard potete utilizzare Path.Combine()

string basePath = "C:\Configs"; 
string file = "MyConfigFile.txt"; 
string fullPath = System.IO.Path.Combine(basePath, file); 
+2

ottiene il percorso assoluto, non il percorso relativo. – dopatraman

+0

@codeninja Sì, ma è un percorso assoluto che è stato determinato in fase di esecuzione _relative_ nella directory corrente, proprio come fa sempre System.Path; [da MSDN:] (http://msdn.microsoft.com/en-us/library/system.io.path.aspx) 'la posizione corrente viene utilizzata come punto di partenza quando si localizza un file specificato con un percorso relativo. ' Inoltre, dallo stesso articolo:' Per determinare la directory corrente, chiamare Directory.GetCurrentDirectory. – brichins

4

Si passa solo in una stringa. Spetta a te gestirlo in modo relativo.

Se si è utilizzato questo codice, per impostazione predefinita supporta i percorsi relativi.

FileInfo tenterà di utilizzare prima il percorso in Environment.CurrentDirectory, se il percorso fornito non è esplicito.

var file = new FileInfo(args[1]); // args[1] can be a filename of a local file 
Console.WriteLine(file.FullName); // Would show the full path to the file 
0

Bene, le classi .NET standard funzionano con percorsi relativi allo stesso modo che in assoluto, quindi è possibile utilizzarli senza problemi. Se C: root è la directory di lavoro del tuo programma, potresti usare c:\myprogram.exe -c configFiles\MyConfigFile.txt e punta a c:\configFiles\MyConfigFile.txt.

0

Senza il percorso relativo come parte del argomento di input, l'applicazione avrebbe bisogno di:

  • o cercare il file che viene passato in
  • aggiungere il nome percorso della directory di configurazione al nome del file
2

avete alcune opzioni generali:

  • memorizzare la directory Pat h nel file di configurazione (hai detto di non volerlo fare)
  • Chiedi all'utente di inserire un percorso relativo (.... \ MyFile.txt)
  • Cerca a livello di codice i file corrispondenti al nome (molto lento e incline a localizzare più file con lo stesso nome)
  • Assumere il file di dati si trova nella directory esecuzione

in qualsiasi modo si fetta, l'utente deve indicare il percorso della directory, sia nella configurazione file, inserendo il percorso relativo o selezionando da un elenco di file con nomi identici trovati in diverse directory.

ANALOGY: Si posiziona un libro di testo in un armadietto, da qualche parte in una scuola. Chiedete al vostro amico di prendere il libro da "un armadietto", senza lasciare intendere esattamente quale armadietto possa essere.Dovresti aspettarti di aspettare molto a lungo e finire con 50 libri simili. In alternativa, fornire un indizio sul corridoio, sulla banca degli armadietti e/o sul numero di armadietti in cui è possibile memorizzare il libro. La vaghezza del tuo indizio è direttamente correlata con il tempo di risposta e il potenziale per restituire più possibilità.

Problemi correlati