destiny_child

Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору jentoso Мы с вами по разному на одну и ту же командную строку смотрим???? Вы вот указывали лишь строку из конфига, не раскрывая значения переменных, поэтому наверное не очень удобно на такую строку смотреть. А я же показал нам реальные значения. И вот значимый кусок ещё раз: Код:| D:\Downloads\innounpacker\innounp.exe -x -m -c D:\iZotope.Trash.v1.3.0-TCD\iZotope.Trash.v1.3.0-TCD.exe @C:\Temp\$mltwcx\lstB063.tmp | ВНУТРЬ программы innounp.exe из командной строки передаются флаги -x и -m, и -c (заметим, что сам путь, который обязан быть указан при этом флаге - тут равен "ничему", потому что мы находимся в корне архива и работаем с верхнеуровневыми объектами), ну и имя архива для обработки далее мы видим. Ну и самое главное: ВНУТРЬ программы innounp.exe из командной строки передается @C:\Temp\$mltwcx\lstB063.tmp = т.е. тот самый список с файлами. Он парсится ВНУТРИ кода программы innounp.exe. И следовательно ВНУТРИ кода происходит ошибка, которая не позволяет работать распаковке для файлов с пробелами в именах. MultiArc тут как бы и не при делах вовсе. Ну, разве что за выставление текущей директории он ответственен перед непосредственным вызовом утилиты. Код: else if (ParamStr(i)[1]='@') and (length(ParamStr(i))>=2) then Filelist:=copy(ParamStr(i),2,length(ParamStr(i))-1) | вот кусок кода, что получает этот файл-список в программе. А вот далее этот список засовывается во внутренний объект FileMasks при помощи предобработки через компонент TStringList Код: if FileExists(FileList) then begin sl:=TStringList.Create; try with sl do begin LoadFromFile(FileList); // try with automatic detection of encoding, needs BOM if (Encoding<>TEncoding.UTF8) and CheckForUtf8(Text) then LoadFromFile(FileList,TEncoding.UTF8); // load again with Utf8 encoding if Count>0 then begin ml:=length(FileMasks); SetLength(FileMasks,ml+Count); for i:=0 to Count-1 do if not Strings[i].IsEmpty then begin FileMasks[ml]:=Strings[i]; inc(ml); end; SetLength(FileMasks,ml); end; end; except on E: Exception do begin WriteColorText('Reading the command line failed. Invalid filelist: ','"'+FileList+'"',clRed,clGreen); writeln; ExitCode:=3; n:=1; end; end; sl.Free; end | Засовываются записи из файла "как-есть" (FileMasks[ml]:=Strings[i];). НО есть нюанс! По шаблону парсинга командной строки после имени файла-архиваЕХЕ может быть файл-список, либо просто перечисление нужных файлов с путями внутри архива (тот самый FileMasks объект ими и наполняется), ну или можно и то и то сразу..... Так вот это перечисление по WIN-правилам уже ввода в консоли обязано быть в кавычках, если текстовый объект имеет пробелы. А вот код распаковщика наоборот - потом обрабатывает такие записи и удаляет эти кавычки: Код: for i:=0 to High(FileMasks) do if (FileMasks[i,1]='"') and (FileMasks[i,length(FileMasks[i])]='"') then FileMasks[i]:=copy(FileMasks[i],2,length(FileMasks[i])-2); | Но черт возьми)) Он это делает для прямых записей о нужных файлах для распаковки И ТОЛЬКО! Он не делает этого же для кода предзагрузки списка нужных файлов для распаковки, как мы видим! Вот тут целый чихуахуа и зарылся))) Проверяется легко. Вызываем командную строку как есть для варианта "файл-список" и для просто перечисления нужных имен файлов с кавычками и без кавычек у этих имен.... 1) innounp.exe -x -m -c D:\iZotope.Trash.v1.3.0-TCD\iZotope.Trash.v1.3.0-TCD.exe @C:\Temp\$mltwcx\lstB063.tmp ну и содержимое файла C:\Temp\$mltwcx\lstB063.tmp: Код: {app}\iZTrash.dll "{app}\TrashCoreDSP TestableDSP.dll" | 2) innounp.exe -x -m -c D:\iZotope.Trash.v1.3.0-TCD\iZotope.Trash.v1.3.0-TCD.exe {app}\iZTrash.dll 3) innounp.exe -x -m -c D:\iZotope.Trash.v1.3.0-TCD\iZotope.Trash.v1.3.0-TCD.exe "{app}\TrashCoreDSP TestableDSP.dll" 2 и 3 варианты сработают без проблем и на выходе мы получим нужный/указанный файл в папочке {app} рядом с innounp.exe А вот в 1 варианте обработан будет лишь файл, что имел запись о себе без кавычек в файле-списке: т.е. только {app}\iZTrash.dll Отсюда вытекает явное доказательство того, что в коде надо кое-что подправить, чтобы подобные списки парсились распаковщиком корректнее)))) | Всего записей: 5033 | Зарегистр. 01-04-2006 | Отправлено: 11:58 07-11-2025 | Исправлено: destiny_child, 15:17 07-11-2025 |
|