2014-11-03 261 views
-5

我有一個C#winForms程序,旨在運行多個PC的USB驅動器。當我將USB驅動器連接到另一臺PC時,驅動器號更改。我怎樣才能使我的驅動器盤符在所有PC上保持一致,或使我的程序真正「便攜」。我需要驅動器盤符,因爲我有一個指向特定目錄的SQLite數據庫數據源。我也有PDF文件打開從一個特定的驅動器號的某個目錄。謝謝從USB驅動器運行程序

+3

爲什麼你需要擺在首位的驅動器盤符? – 2014-11-03 15:29:06

+0

你可以嘗試使用try-catch來驅動USB驅動器。您的USB驅動器中的文件路徑不會更改。它最終會抓住正確的條件。 – 2014-11-03 15:29:08

+3

我看不出如何強制驅動器號,因爲其他用戶可能已經將該字母映射到網絡驅動器。如何顯示違規代碼?您是否使用相對路徑可以完成的絕對路徑? – 2014-11-03 15:29:11

回答

2

你可以得到正在執行的程序集路徑。

string path = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath; 

從那裏,你可以獲取驅動器號(根路徑):

string drive = Path.GetPathRoot(path); 

如果你的文件是在同一目錄下的可執行文件,你可以得到這樣的文件路徑:

string directory = Path.GetDirectoryName((new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath); 
string databaseFile = Path.Combine(directory, "filename.dbf"); 
+2

啊...... @PatrickHofman ......再次。請注意讓我們知道這個問題的答案是什麼? – BenjaminPaul 2014-11-03 15:30:04

+0

OP想知道如何修復驅動器號。給出的答案是「這是如何獲得可執行文件路徑」。他們不相關。 – 2014-11-03 15:33:29

+1

@Benjamin問題在於我們可以猜測,但這完全不清楚OP要求什麼。如果它是_「我怎樣才能得到我的可執行文件所在的目錄?」,那麼這是一個已經在網站上被回答了幾十次的重複,不應該被回答,而是被標記爲這樣。 – CodeCaster 2014-11-03 15:34:01

0

我想你需要你的應用程序的目錄。

string path = System.IO.Directory.GetCurrentDirectory(); 

(如果你打電話SetCurrentDirectory(),用這個:System.IO.Path.GetDirectoryName(new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath);

你想對你的驅動器? (驅動器的總是1號)

path.Substring(0, 2); 

如果沒有一個字母,

path.Substring(0, path.IndexOf('\\') + 1); 
+2

你必須小心使用它,因爲有人可以調用SetCurrentDirectory() – 2014-11-03 15:31:03

+1

我需要驅動器號,因爲我有一個指向某個目錄的SQLite數據庫數據源。我也有PDF文件打開從一個特定的驅動器號的某個目錄。 – Onlytito 2014-11-03 15:37:10

+0

@ehuizar那麼你在這裏。 – joppiesaus 2014-11-03 15:38:18