2013-09-27 21 views
0

嘿所以我想用一個相對路徑來訪問一個excel文件,因爲應用程序將在不同的計算機上運行,​​所以路徑並不總是相同的。現在我做這樣的事情:我的相對路徑有什麼問題?

string exdestination = ".\\..\\..\\..\\Files"; 
string difDestination = Path.Combine(exdestination, "CATTII." + exTable + "-diff.xls"); 
//string difDestination = @"C:\Users\Me\Documents\Visual Studio 2010\Projects\TranslatorHelper\Files\CATTII.en-US-diff.xls"; 

最後一行是顯示它應該是路徑的註釋行。但是我不斷收到錯誤:Microsoft Office Excel無法訪問文件'C:\ Files'。有幾種可能的原因:

•文件名或路徑不存在。 •該文件正在被另一個程序使用。 ?試圖保存的工作簿與當前打開的工作簿具有相同的名稱。

任何幫助將不勝感激。謝謝!

+0

當你執行這個代碼什麼是你的當前目錄中的位置?提示環境。CurrentDirectory – Steve

+0

「C:\\ Users \\ Me \\ Documents \\ Visual Studio 2010 \\ Projects \\ TranslatorHelper \\ TranslatorHelper \\ bin \\ Debug」 –

回答

1

如果路徑相對於您的程序可執行文件,則使用Application.StartupPath作爲路徑的基礎。 (你不能依賴當前目錄一定是你exe文件的路徑;如果調用者希望運​​行程序,可以設置它不同的方式,它可以通過各種系統操作進行更改,例如,如果讓用戶瀏覽文件/打開對話框等)

你需要從這個路徑的末尾刪除exe文件名,如:

string folder = Path.GetDirectoryName(Application.StartupPath); 

要上去上面3個文件夾,你可以將一個討厭的相對路徑像「.. \ .. \」或者只是從文件夾中剝離3個文件夾:

for (int i = 0; i < 3; i++) 
    folder = Path.GetDirectoryName(folder); 

然後,你需要添加你的路徑的其餘部分:

folder = Path.Combine(folder, "Files"); 
string difDestination = Path.Combine(folder, "CATTII." + exTable + "-diff.xls"); 

對於額外的信用,你可以添加一些錯誤處理與不是可執行文件的文件夾3+深,或目標文件夾沒有被發現,應對等。

+0

必須將循環更改爲i <2,否則它會很好,謝謝 –

+0

在這種情況下,您的原始代碼中可能有太多「..」:-) –

0

我相信PATH類將處理單斜槓(以及任何方式的雙斜線//或\ - 在路徑字符串中)。但我認爲你首先需要兩個點,而不僅僅是一個。

.. \ - 向上一個文件夾

。 - 此文件夾

您可以使用您創建的字符串來測試您是否擁有正確的路徑來寫入新文件並查看它結束的位置。

1

也許最好使用相對於衆所周知的文件夾的固定子目錄。

在另一臺計算機上安裝應用程序後,您可以使用基本文件夾(如當前用戶的MyDocuments或C:\ ProgramData)檢索文件,併爲應用程序數據文件添加一個子文件夾。

// This will be on your machine C:\ProgramData 
string baseDocs = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); 

// This will point to a subfolder named "TranslatorHelper" inside the ProgramData common folder 
string difDestination = Path.Combine(baseDocs, "TranslatorHelper", "CATTII." + exTable + "-diff.xls"); 

Environment.SpecialFolder枚舉有許多衆所周知的文件夾,你可以使用上面的方法來達到,你已經把文件