2012-08-09 9 views
1

目前我正在試圖從命令行獲取用戶輸入OutputPath寫在C#文件有/無相對路徑

using (outfile = new StreamWriter(OutputPath)) 
{ 
    outfile.Write(result); 
} 

如果給予或在c將文件寫入此寫入絕對路徑:\ Windows \ System32下

如何使其成爲絕對路徑或取決於當前目錄。有沒有辦法從命令行獲取當前工作目錄,或者是否有更好的API可以找出它。

感謝

回答

2

C#知道如何使用基於當前目錄的相對路徑。

如果您看到在C:\Windows\System32中創建的文件,那麼可能是您當前的工作目錄。

快捷方式可以設置正在啓動的程序的工作目錄。打開/保存常用文件對話框也會混淆當前的工作目錄。

如果您不使用快捷方式啓動應用程序,它將繼承父進程中的當前目錄。 explorer.exe通常具有C:\Windows\System32作爲工作目錄,這對於通過雙擊Explorer中的圖標啓動的應用程序而言非常常見。

+0

你是對的@本。我使用PowerShell,顯然PowerShell打開的第一條路徑是使用的路徑。因此,如果以admin身份打開C:\ windows \ system32,否則它將是C:\ users \ myusername。這是爲什麼 ?儘管我在另一個目錄中,但是我開始使用PowerShell的路徑。 – 2012-08-09 22:09:01

2

您可以使用Directory.GetCurrentDirectory來獲得OS當前的工作目錄。

+0

這意味着我將需要檢查輸入是否是絕對的,如果不是我可以得到當前目錄。我想知道是否有我可以使用的API可以找出兩者。 – 2012-08-09 21:44:21

+0

@Saher:您可以使用[Path.IsPathRooted](http://msdn.microsoft.com/en-us/library/system.io.path.ispathrooted.aspx)函數來確定傳遞路徑的* type *並基於此做出您的決定。 – Tigran 2012-08-09 21:47:59

3

使用Path.IsPathRooted來確定輸入是否是絕對的,並Environment.CurrentDirectory獲取當前目錄。有了這些信息,你應該全部設置。

+0

-1的答案僅僅是重複Tigran已經提供的信息。 – 2012-08-09 23:49:41

+0

@BenVoigt我做了我自己的研究,我們在大致相同的時間結束了發佈。我不是爲什麼你會冷靜下來。 – Asik 2012-08-10 01:20:27

+0

在我投票的時候,你的回答是「一小時前」,Tigran的評論是「2小時前」。我看到它更接近了一點,你的回答是在他的回答7.5分鐘後和他評論3分鐘後。但它仍然只是混亂,有多個相同的答案。答案並不是很好,因爲它只是重複了(相當大的努力)C#已經做了什麼。問題是沒有找到當前目錄,這是錯誤的導演是最新的。 – 2012-08-10 05:27:45