2017-04-20 90 views
2

我有一個C#程序,它會從相對路徑./report/report1.rdlc中讀取一個文件,但有時出於一個未知的原因它從一個完全不同的地方找到了該文件C:\Windows\system32\report\report1.rdlc但該文件實際上是放置在C:\Program Files (x86)\Application1\report\report1.rdlc和程序在C:\Program Files (x86)\Application1\內。任何原因相對路徑不從工作目錄開始?C#相對路徑不從工作目錄開始

+1

不需要的工作目錄與可執行二進制文件所在的目錄是相同的目錄。 – zerkms

+0

「C#程序」在哪裏? –

+0

當你試圖在'C:\ Windows \ system32 \ report \'中找到'report1.rdlc'時,你是如何開始你的程序的?你是在'cmd'控制檯裏啓動它,而裏面的路徑是'C:\ Windows \ system32 \'? – abto

回答

1

它確實從工作目錄開始。但是,您不應該使用工作目錄,因爲如果執行特定的IO任務(例如,有時會執行打開文件對話框或(顯然)Directory.SetCurrentDirectory方法),它可能會有所不同。相反,您應該使用AppDomain.CurrentDomain.BaseDirectory屬性來獲取程序集文件所在的路徑。你可以這樣使用:

var relativePath = Path.Combine ("report", "report1.rdlc"); 
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory; 
var absolutePath = Path.Combine (baseDirectory, absolutePath); 

現在你應該使用absolutePath來訪問文件。