2011-01-19 74 views
8

我有一個命令行程序,它將一個配置文件作爲參數,即C:\ myprogram.exe -c C:\ configFiles \ MyConfigFile.txt。我希望能夠讓這個我不必鍵入配置文件的絕對路徑,所以不是上面我可以只輸入C:\ myprogram.exe -c MyConfigFile.txt使用C#的文件的相對路徑

我不太瞭解C#如何處理路徑,以瞭解是否或如何實現這一點。任何見解都會被讚賞。

+0

可能的重複[如何將相對路徑轉換爲C#/ .NET中的完全限定路徑?](http://stackoverflow.com/questions/2162292/how-do-i-convert-a-relative -path-to-a-fully-qualified-path-in-c-net) – finnw 2011-01-19 21:08:30

回答

12

使用Path.GetFullPath()

喜歡的東西:

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

,如果配置文件是在當前目錄中的。如果他們存儲在標準文件夾,您可以使用Path.Combine()

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

這將獲得絕對路徑,而不是相對路徑。 – dopatraman 2013-06-14 20:02:40

4

你只傳遞一個字符串。這取決於你以相對路徑的方式處理它。

如果您使用了此代碼,則默認情況下會支持相對路徑。

FileInfo將首先嚐試使用Environment.CurrentDirectory中的路徑,如果提供的路徑不明確。

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

好吧,標準的.NET類以絕對的方式處理相對路徑,因此,您可以毫無問題地使用它們。如果C:root是程序的工作目錄,則可以使用c:\myprogram.exe -c configFiles\MyConfigFile.txt,它將指向c:\configFiles\MyConfigFile.txt

0

不作爲輸入參數的一部分相對路徑,您的應用程序將需要:

  • 無論是搜索傳遞在
  • 追加Config目錄的路徑名的文件名的文件
2

你有一些常規選項:

  • 商店的目錄拍在配置文件中H(你說你不希望這樣做)
  • 讓用戶輸入一個相對路徑(.... \ MyFile.txt的)
  • 編程搜索匹配名稱的文件(很慢而且容易定位相同名稱的多個文件)
  • 假設數據文件是在執行目錄

你切它的任何方式,用戶必須註明目錄路徑,無論是在配置文件,輸入相對路徑或從在不同目錄中找到的具有相同名稱的文件列表中進行選擇。

ANALOGY:你把一本教科書放在一個儲物櫃裏,在學校的某個地方。你要求你的朋友從「一個儲物櫃」取得這本書,而沒有暗示可能是哪個儲物櫃。你應該等待很長時間,最終得到50本類似的書。或者,提供關於走廊,儲藏室的銀行和/或可以存儲書籍的儲物櫃號碼的線索。你的線索含糊不清與迴應時間和迴歸多種可能性的潛力直接相關。