2011-08-26 104 views
1

[編輯]打開文件

我嘗試在我的基地目錄中打開一個文件夾中的文件。

從解決方案資源管理器中,有一個文件夾「Docs」和一個pdf文件(tempPDF.pdf)。 這將對應於我的項目文件夾中的文件夾。 (例如Project \ Docs),它在保存級別中作爲bin和properties文件夾。

String assemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase); 

Process proc = new Process(); 
proc.StartInfo = new ProcessStartInfo() 
{ 
    FileName = assemblyPath + "\\Docs\\tempPDF.pdf" 
}; 
proc.Start(); 

我已經改變了生成操作爲「資源」和複製到輸出目錄爲「一直拷貝」。然而,PDF文件不是複製到bin,也不能由程序指定文件。我清理,構建和重建解決方案。

路徑一直指向bin \ Debug文件夾,因爲這是可執行文件所在的位置,但文件的位置與bin位於同一級別。

我可以通過像「Images \ img.png」這樣的路徑簡單地在XAML中指定我的圖像,並且它會相對查找圖像。

這應該是一個非常簡單的問題 - 從鼠標單擊打開PDF。

[編輯 - 與答案]

必須改變生成操作「嵌入的資源」,不「資源」(僅資源複製一個空文件夾沒有文件)。我不知道爲什麼。

+1

Drat!我只知道解決方案背後的代碼。必須開始學習XAML! – Polyfun

+0

這會有幫助嗎? http://msdn.microsoft.com/en-us/library/system.appdomain.basedirectory.aspx –

+0

它們不是相對於應用程序安裝目錄安裝的嗎?如果是這樣,您可以使用它和相對路徑來獲取PDF的完整路徑。 – kenny

回答

8

首先,沒有XAML解決方案。我們無法執行沒有代碼隱藏協助的流程。

您顯示的URI是相對於當前程序集。 您可以使用程序集目錄路徑,然後附加文件的相對路徑。 它可以是這樣的:

String assemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase); 

Process proc = new Process(); 
proc.StartInfo = new ProcessStartInfo() 
{ 
    FileName = assemblyPath + "\\Docs\\somePDF.pdf" 
}; 
proc.Start(); 

如果你想要把你的文件的應用程序文件夾,你也可以用它代替組裝路徑的目錄路徑:

string appPath = Path.GetDirectoryName(Application.ExecutablePath); 
+0

@KMC只需添加../然後? 'Filename = assemblyPath +「.. \\」+「\\ Docs \\ somePDF.pdf」;'。但程序集是應用程序的應用程序根文件夾,所以最好將文件(somePDF.pdf)放到應用程序文件夾中。 –

+0

@KMC - 它應該有效,因爲代碼是正確的。不正確的是您不將該文件複製到Debug文件夾。 –

+0

你可以告訴我一個編譯後的圖像和實際的PDF文件的文件夾層次結構。 – Nadzzz

0

你可以得到Nadzzz寫道的裝配路徑。如果你想得到'... bin'路徑而不是'... bin \ debug',你可以使用Directory.GetParent method.

0
static function to open the folder a file is located in. 
I use in a static common class for many of my projects. 

public static void ShowFileInFolder(string filepath) 
{ 
     System.Diagnostics.Process prc = new System.Diagnostics.Process(); 
     prc.StartInfo.FileName = Path.GetDirectoryName(filepath); 
     prc.Start(); 
}