2014-11-03 2 views
-5

У меня есть программа C# winForms, предназначенная для запуска USB-накопителя с нескольких ПК. Когда я подключаю USB-накопитель к другому ПК, смена буквы диска. Как я могу сделать букву на диске совместимой на всех ПК или сделать мою программу «переносной». Мне нужна буква диска, потому что у меня есть источник данных SQLite Database, указывающий на определенный каталог. И у меня также есть файлы PDF, открывающиеся из определенного каталога с конкретной буквой диска. СпасибоЗапуск программы с USB-накопителя

+3

Зачем вам букву диска в первую очередь? –

+0

вы можете попробовать буквы для диска usb с try-catch. ваш путь к файлу в USB-накопителе не изменяется. он в конечном итоге поймает правильное состояние. –

+3

Я не вижу, как вы могли бы заставить букву диска, так как другой пользователь уже мог иметь эту букву, отображаемую, скажем, сетевым диском. Как насчет показа кода нарушения? Используете ли вы абсолютные пути, где будут относительные пути? –

ответ

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

Ahh .. @PatrickHofman ... снова. Позаботьтесь, чтобы рассказать нам о том, какова проблема с этим ответом? – BenjaminPaul

+0

OP хочет знать, как исправить букву диска. Ответ: «вот как получить исполняемый путь». Они не связаны. –

+1

@ Benjamin проблема заключается в том, что мы можем догадаться, но это совершенно неясно, о чем спрашивает OP. Если это _ «Как я могу получить каталог, в котором находится мой исполняемый файл?» _, То это дубликат, на который ответили десятки раз на сайте, и на него не следует отвечать, но вместо этого помечено как таковое. – CodeCaster

0

Я думаю, вам нужен каталог вашего приложения.

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

(если вы звоните SetCurrentDirectory(), используйте: System.IO.Path.GetDirectoryName(new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath);)

Вы хотите, чтобы ваш диск? (Drive всегда 1 письмо)

path.Substring(0, 2); 

Если не одна буква,

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

Вы должны быть осторожны с этим, потому что кто-то может вызвать SetCurrentDirectory() –

+1

Мне нужна буква диска, потому что у меня есть источник данных SQLite Database, указывающий на определенный каталог.И у меня также есть файлы PDF, открывающиеся из определенного каталога с конкретной буквой диска. – Onlytito

+0

@ehuizar Ну вот идите. – joppiesaus

Смежные вопросы