Что нового

Проблема с кавычками в функции FileExists()

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Проблема возникла при считывании адреса из ключа реестра...
Дело в том, что адрес к программе хранится в кавычках, и FileExists() считает такой путь неправильным...
Код:
; НАЧАЛО
 $R=RegRead('HKLM\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\shell\open\command','')

 If FileExists($R) Then
  MsgBox(0,$R,'FIREFOX установлен...')
 Else
  MsgBox(0,$R,'FIREFOX не установлен...')
 EndIf
; КОНЕЦ

Удалить кавычки можно и несложно, дело не в этом...
Вопрос в другом: почему адрес в кавычках считается неправильным?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
функция добавляет кавычки, скорее всего
""C:\Program Files (x86)\Mozilla Firefox\firefox.exe""
что вызывает ошибку
это уже вопрос к разрабам..
ведь run и shellexecute работают с этим путем правильно
кстати, FileGetAttrib тоже не воспринимает этот путь
возможно еще какие то функции не будут работать..
не весело
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
RegRead возвращает строковый параметр как есть, то есть с кавычками.
Следовательно, FileExists не сможет правильно обработать путь.
Код:
$sPath = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\shell\open\command', '')
ConsoleWrite(StringFormat('Path: %s\tExists: %d\n', $sPath, FileExists(Execute($sPath))))
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Garrett
В качестве временного решения Ваш вариант мне понравился больше, чем мой...
Код:
; НАЧАЛО

 $R=StringReplace(RegRead('HKLM\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\shell\open\command',''),'"','')
 MsgBox(0,$R,FileExists($R))

; КОНЕЦ

Так как для темы я выбрал раздел "Баг-репорты и запросы на новые функции", хотелось бы услышать мнения "баг - не баг", и если баг, то дождаться исправления бага в одной из следующих версий AUTOIT, а если не баг, то сразу отмечу тему решённой...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
snoitaleR [?]
хотелось бы услышать мнения "баг - не баг"
IMHO нет, потому что кавычки тоже символ и функция RegRead их честно вам возвращает. :smile:
А вот, к примеру, функция IniRead возвращает значение уже без кавычек.
INI:
[prog]
path="C:\Program Files\Google\Chrome\Application\chrome.exe"
Код:
$sPath = IniRead('test.ini', 'prog', 'path', 'null')
ConsoleWrite(StringFormat('Path: %s\tExists: %d\n', $sPath, FileExists($sPath)))
 
Верх