Skif_off
|
Posted: Wed Oct 01, 2014 13:04 Post subject: |
|
|
Если кому-нибудь интересно: проверил работу с over MAX_PATH - нормально
 с небольшим изменением скрипта Code: | ;нужно заменить
$aFileList = _FO_FileSearch($sPathWithPic, 'jpg|jpeg|jpe', True, $iD, 1, 1, 2, 0)
;на
$aFileList = _FO_FileSearch('\\?\' & $sPathWithPic, 'jpg|jpeg|jpe', True, $iD, 1, 1, 2, 0) |
(предполагается, что скрипт, jpegtran.exe и начальный каталог лежат в пределах MAX_PATH), но только на Win7 (и выше, вероятно) На WinXP SP(2|3) не срабатывает, если путь длиннее MAX_PATH, ищу решение, возможно - тупо прикручу проверку версии ОС. Или забить и просто чуть изменить текст ошибки на Can't open file for reading (Unicode or MAX_PATH?), т.к. с префиксом "\\?\" всё равно работает.
Кстати, с умляутами и вообще юникодом jpegtran.exe не сработает, в лог попадет запись вида:
%путь к jpegtran%\jpegtran.exe: can't open \\?\%путь к файлу%\%имя файла с заменой проблемных символов на похожий из класс. латиницы%.jpg for reading
С случае ещё и длинных путей получается ппц: на тестовой папке в лог попала строка с 753 символами, чтобы подсократить,
 можно Code: |
;заменить
If $sOut Then
$sError = StringRegExpReplace($sOut, '[\r\n]+', ' ')
FileWriteLine($hFile, $aFileList[$i] & @TAB & $sError)
$iCounterError += 1
EndIf
;на
If $sOut Then
If StringInStr($sOut, "jpegtran.exe: can't open") Then
FileWriteLine($hFile, $aFileList[$i] & @TAB & "Can't open file for reading (Unicode?)")
$iCounterError += 1
Else
$sError = StringRegExpReplace($sOut, '[\r\n]+', ' ')
FileWriteLine($hFile, $aFileList[$i] & @TAB & $sError)
$iCounterError += 1
EndIf
EndIf |
Как скажется на скорости - не проверял. |
|