2013-11-19 2 views
3

Если мой исполняемый файл работает с пути без пробелов, этоФайл не найден на File.Exists с пробелами в пути

if(!File.Exists(@"\program.exe")) 
    MessageBox.Show("File not found"); 

не срабатывает. Но, если программа выполняется из пути с пробелами, например C:\Program Files\etc\, я получаю файл не найден. Мое исполняемое приложение и program.exe находятся в одной папке.

Как я могу избежать этого?

+0

http://i.stack.imgur.com/ P3CbO.png .... работает для меня –

+0

@RoyiNamir Ну, я не могу контролировать, где мои пользователи хотят установить приложение: P – chwi

+0

Вы должны использовать его как ! File.Exists (@ "C: \ Program Files \ etc \ program.exe ") – mgokhanbakal

ответ

1

Просто получить путь к каталогу исполнения и добавить его к имени файла exe

string DirPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 
if(!File.Exists(DirPath + @"\program.exe")) 
    MessageBox.Show("File not found"); 
4

Возможно, это может быть кажется, как путь имеет какое-то отношение к нему, это рабочий каталог. Попробуйте этот код:

var path = Path.Combine(
    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), 
     "program.exe"); 
if (!File.Exists(path)) 

Путь, в котором он запущен, не приведет к сбою этого кода. Однако, когда рабочий каталог не является тем, что ожидается; что будет.

Кроме того, не принимает, что вы находитесь в определенном каталоге. Всегда предоставляйте полный путь. Такие объекты, как SaveFileDialog и OpenFileDialog, могут изменять рабочий каталог во время выполнения.

+0

Этот путь приводит к 'C: \ app \ bin \ Release \ MyApplication.exe \ program.exe" ', так что не будет работать – chwi

+0

@Wilhelmsen, где в мире есть этот« program.exe »? –

+0

В том же папка как мой исполняемый файл. Это программа, которую мое приложение время от времени запускается в фоновом режиме. – chwi

0

Чтобы проверить наличие вашего файла в «текущем каталоге», вы не должны указывать символ «\». Таким образом:

if(!File.Exists("program.exe")) 
    MessageBox.Show("File not found"); 

Here несколько информация.

0

Я бы просто удалить "\" из аргумента метода File.Exists(@"program.exe") и проверить текущий рабочий каталог на GetCurremtDirectory, чтобы убедиться, что относительный путь, который вы проходите (- относительный путь) создает правильный полный путь к исполняемому.

0
File.Exist(@"\program.exe") 

проверит program.exe в корне диска, например C: \ program.exe, если программа запущена из C:

+0

Не ответ, но спасибо за объяснение :) – chwi

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