Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   автоматический поиск и замена HEX в файлах (http://forum.oszone.net/showthread.php?t=193136)

Tosyk 05-12-2010 21:51 1559082

автоматический поиск и замена HEX в файлах
 
Возможно ли такое сделать с помощью cmd? Нужно автоматически поправить HEX большого количества файлов с последующим переименованием.

И вот ещё: как сделать так чтобы такой скрипт работал:

1 - при перетаскивании на него одного/группы файлов
2 - при запуске производился поиск и обработка файлов вглубь по каталогам.

p.s.: иногда нужно не заменить hex, а добавить его в определённое место в файле.

amel27 06-12-2010 03:56 1559284

Цитата:

Цитата Tosyk
автоматически поправить HEX большого количества файлов с последующим переименованием »

если по адресу, то проще Unix-утилитой DD (порт для Windows), если по значению - посимвольным конвертером TR (есть в комплекте GNU utilities for Win32) или любым CMD-редактором, поддерживающим HEX (SFK, FART и т.п.)

P.S. если размер файлов <= 65280 байт можно поизвращаться со штатной DEBUG.EXE

Tosyk 06-12-2010 05:36 1559292

Вложений: 1
Вот пример, заголовок файла, нужно найти значения на верхней картинке и заменить их на значения на нижней картинке, очень часто требуются именно такие операции. Ещё иногда нужно добавить заголовок в файл. Хотелось бы обойтись без сторонних утилит, так сказать автоматизировать, потому что иногда количество файлов переваливает за несколько тысяч.

amel27 06-12-2010 06:22 1559296

Цитата:

Цитата Tosyk
значения на верхней картинке и заменить их на значения на нижней картинке »

конкретизируйте задачу именно для батника (картинки он распознавать не умеет): ОТКУДА взять блок (файл/позиция/длина/значение), КУДА этот блок записать/вставить (файл/позиция/длина/значение), как планируете передавать эти параметры в батник (переменная, командная строка, файл)?

Цитата:

Цитата Tosyk
Хотелось бы обойтись без сторонних утилит, так сказать автоматизировать, потому что иногда количество файлов переваливает за несколько тысяч. »

проще и надежней автоматизировать как раз сторонними утилитами, про ограничения DEBUG.EXE уже сказал

Tosyk 06-12-2010 07:57 1559312

Уточню, что я знаком как с cmd так и с hex довольно поверхностно, поэтому вот этого

Цитата:

Цитата amel27
ОТКУДА взять блок (файл/позиция/длина/значение), КУДА этот блок записать/вставить (файл/позиция/длина/значение), как планируете передавать эти параметры в батник (переменная, командная строка, файл)? »

я не смогу сделать, т.е. если вы объясните как мне это объяснить, то конечно смогу, но тут же не школа, зачем вам это нужно (я имею ввиду объяснять).

Цитата:

Цитата amel27
проще и надежней автоматизировать как раз сторонними утилитами, про ограничения DEBUG.EXE уже сказал »

про эту программу понял, так же обратил внимание на две консольные утилиты:
Цитата:

Цитата amel27
SFK, FART»

в принципе я этого и искал, FART предпочтительнее, так как он весит меньше SFK. но по FART не нашёл толком примеров, даже не знаю как к файлу его применить.

Так вот к вопросу
Цитата:

Цитата amel27
конкретизируйте задачу именно для батника (картинки он распознавать не умеет) »

Нужно чтобы выделенная часть файла на картинке сверху была найдена в файле и заменена на выделенную часть файла на нижней картинке. Картинка в моём предыдущем посте.

amel27 06-12-2010 09:33 1559345

Цитата:

Цитата Tosyk
я знаком как с cmd так и с hex довольно поверхностно »

да в общем, речь не про CMD/HEX... пример:
взять с файла TEST1.BIN первые 128 байт и скопировать в начало (с заменой) файла TEST2.BIN, вариант на DD:
Код:

dd bs=1c count=128 if="test1.bin" of="%~n0.tmp"
dd bs=1c count=128 if="%~n0.tmp" of="test2.bin"

или так:

Код:

dd bs=1c count=128 if="test1.bin" of="test2.bin"

Tosyk 06-12-2010 09:55 1559356

это с помощью стандартного CMD?

а как заменить не начало (либо конец), а именно определённые значения? потому что бывает так, что есть файлы с разными значениями вначале, соответственно эти значения нужно заменить на другие, тоже разные.

и как сделать это с маской? или вот это:

Цитата:

Цитата Tosyk
1 - при перетаскивании на него одного/группы файлов
2 - при запуске производился поиск и обработка файлов вглубь по каталогам. »


amel27 06-12-2010 11:25 1559410

Цитата:

Цитата Tosyk
это с помощью стандартного CMD? »

+ названная выше утилита DD

Цитата:

Цитата Tosyk
а как заменить не начало (либо конец), а именно определённые значения?"

"определенные" чем?.. если расположением блока в файле, то начало блока можно задать параметрами SKIP/SEEK уилиты DD (соответственно, для смещения блока байтов во входном/выходном файлах)... в конце концов, где-то это "значение" всё равно нужно брать

Цитата:

Цитата Tosyk
как сделать это с маской? »

легко, только сначала нужно определиться с предыдущими пунктами

Tosyk 06-12-2010 11:44 1559417

Да-да, теперь с программой понятно (я так понимаю она тоже консольная) чтобы например зашить её утилитой Quick Batch File Compiler.

именно блок (определённые значения) нужно заменить, прошу покажите на примере хотя бы моих файлов

amel27 07-12-2010 08:17 1560006

Цитата:

Цитата Tosyk
чтобы например зашить её утилитой Quick Batch File Compiler »

консольная, но сторонними компиляторами не балуюсь... как-то и без этого работает

Цитата:

Цитата Tosyk
прошу покажите на примере хотя бы моих файлов »

собственно, ничем не отличается от примера из поста #6 (кроме имен файлов), по вашему рисунку блок считается именно с начала файла... либо, укажите другое условие:
Код:

@echo off

set F0=mcc001n2b. SDD
set F1=DXT5_2048x2048.dds

dd bs=1c count=128 if="%F0%" of="%F1%"


Tosyk 07-12-2010 08:29 1560010

Так, значит получается скрипт ищет блок в файле DXT5_2048x2048.dds и подставляет в то же место в файл mcc001n2b. SDD. Это работает!

Но при этом получается? что нужен файл DXT5_2048x2048.dds, который вечит 4 мб, хотя думаю можно удалить всё, что не нужно в HEX'e этого файла (думаю при этом будет весить не больше трёх килобайт).

А как осуществить поиск определённого блока и замену этого блока на новый по маске, допустим *. SDD?

amel27 07-12-2010 08:46 1560017

Цитата:

Цитата Tosyk
Так, значит получается скрипт ищет блок в файле DXT5_2048x2048.dds и подставляет в то же место в файл mcc001n2b. SDD. Это работает! »

он ничего не ищет - просто берет блок заданного размера (128 байт) из заданной позиции (=0) в заданном файле (mcc001n2b. SDD) и копирует его в заданную позицию (=0) другого файла (DXT5_2048x2048.dds)

Цитата:

Цитата Tosyk
Но при этом получается? что нужен файл DXT5_2048x2048.dds, который вечит 4 мб »

размер самого файла не имеет значения

Цитата:

Цитата Tosyk
как осуществить поиск определённого блока »

что ищем-то?... прежде чем писать скрипт, нужно четко представлять алгоритм работы (без скрипта), а вот этого я никак не могу понять.... очевидно, двух файлов для примера маловато

Tosyk 07-12-2010 09:36 1560049

Так, постараюсь объяснить исходя из того, что я от вас уже узнал.

Дано: 1000 файлов с расширением *. SDD

700 файлов с заданной позиции (=0) имеют блок заданного размера (128 байт) 1-ого типа (DXT5)
200 файлов с заданной позиции (=0) имеют блок заданного размера (128 байт) 2-ого типа (DXT1)
100 файлов с заданной позиции (=0) имеют блок заданного размера (128 байт) 3-ого типа (DXT1a)

типы равны по размеру блока, но отличаются содержанием этого блока

Задача:

1 - в каждом файле с расширением *. SDD заменить блок заданного размера (128 байт) на новый тип
2 - переименовать расширение *. SDD в *.dds

amel27 07-12-2010 11:20 1560116

Tosyk, 700+200+100=1000, т.е. каждому SDD-файлу соответствует какой-то один блок из 3-х, допустим эти блоки находятся в файлах DXT5.BIN, DXT1.BIN, DXT1a.BIN, которые находятся в том же каталоге, где батник... осталось решить какой из этих трёх блоков выбрать для конкретного SDD-файла?... или это не имеет значения, т.е. по порядку - первые 700 -> DXT5.BIN, следующие 200 -> DXT1.BIN и т.д.?.. и какова примерно структура каталога с SDD-файлами?

Tosyk 07-12-2010 11:39 1560142

Цитата:

Цитата amel27
Tosyk, 700+200+100=1000, т.е. каждому SDD-файлу соответствует какой-то один блок из 3-х, допустим эти блоки находятся в файлах DXT5.BIN, DXT1.BIN, DXT1a.BIN, которые находятся в том же каталоге, где батник... осталось решить какой из этих трёх блоков выбрать для конкретного SDD-файла?... или это не имеет значения, т.е. по порядку - первые 700 -> DXT5.BIN, следующие 200 -> DXT1.BIN и т.д.? »

Да, вы всё правильно поняли. Структура каталогов может быть различная.

Цитата:

Цитата amel27
осталось решить какой из этих трёх блоков выбрать для конкретного SDD-файла »

Расскажу немного о *. SDD файлах. Это текстуры использующие стандарт сжатия DXT, только с изменённым заголовком. Из-за изменённого заголовка они как раз и не открываются и не просматриваются. Поэтому нужно это заголовок заменить на правильный!

Цитата:

Цитата amel27
структура каталога с SDD-файлами »

в каталогах могут быть такие типы (о типах упоминал выше, для примера тогда назвал 3):

DXT1 256x256
DXT1 512x512
DXT1 1024x512
DXT1 1024x1024
DXT1 2048x2048
DXT1 2048x1024

DXT5 256x256
DXT5 512x512
DXT5 1024x512
DXT5 1024x1024
DXT5 2048x2048
DXT5 2048x1024
...

цифры (пр.: 256x256) - это размер текстуры в пикселях. Типов текстур может быть и больше. Каждому типу соответствует свой блок заданного размера (128 байт) и начинается он с заданной позиции (=0).

amel27 07-12-2010 12:07 1560164

Цитата:

Цитата Tosyk
в каталогах могут быть такие типы (о типах упоминал выше, для примера тогда назвал 3)»

значит для каждого типа нужно будет "приготовить" свой файл-шаблон (размером 128 байт) с нужным содержимым и узнаваемым именем типа "DXT1_1024x1024.BIN", но один вопрос так и остался нерешенным: допустим, мы перебираем все SDD файлы в папке по очереди (в произвольном порядке), берем очередной SDD-файл, как определить, какой BIN-файл из "библиотеки шаблонов" ему соответствует?.. по имени SDD-файла?... размеру или еще как?.. полагаю, шаблон должен соответствовать размеру текстуры, но как установить это соответствие?.. как вы это определяете при ручной замене?

Tosyk 07-12-2010 12:27 1560182

Цитата:

Цитата amel27
как вы это определяете при ручной замене? »

Я определяю только на глаз по размеру файла в мегабайтах. Примерно знаю сколько какой тип должен "весить" и подставляю ему "правильный" блок.

Вот я и говорил об этом в моём посте чуть выше
Цитата:

Цитата Tosyk
а как заменить не начало (либо конец), а именно определённые значения?»

Обратите внимание на картинку которую я прикреплял. Там в первом файле (верхний, тот, который нужно исправить):
Код:

SDD...|...@...5TXD...@...
нужно заменить на
Код:

DDS  |...@...DXT5...
Так вот, можно ли искать конкретно эти самые значения? Допустим в определённых байтах ищем

SDD, затем ..@.., затем 5TXD, затем ...@...

и если сочетание всех этих значение найдено, то приравниваем этот файл к типу DXT5 2048x1024 (в данном случае) и заменяем его первые 128 байт на новые.

amel27 08-12-2010 05:47 1560717

Цитата:

Цитата Tosyk
Так вот, можно ли искать конкретно эти самые значения? Допустим в определённых байтах ищем »

если все "неправильные" (старые) заголовки можно отфиксировать в файлах аналогично правильным (новым), типа: "DXT1_1024x1024.OLD"/"DXT1_1024x1024.NEW", то для каждого обрабатываемого SDD алгоритм может быть следующий:

- считываем заголовок во временный файл;
- ищем точно такой же файл в библиотеке "неверных шаблонов";
- если файл найден, берем новый шаблон с таким же именем;
- восстанавливаем новый заголовок

только надо определиться с положением/размером блока, однозначно идентифицирующего тип "неверного" шаблона и "построить" библиотеку пар шаблонов старый/новый

Цитата:

Цитата Tosyk
Я определяю только на глаз по размеру файла в мегабайтах. Примерно знаю сколько какой тип должен "весить" и подставляю ему "правильный" блок. »

если определить интервалы размеров для каждого типа, то можно и по размеру

Tosyk 08-12-2010 06:45 1560724

Цитата:

Цитата amel27
- считываем заголовок во временный файл;
- ищем точно такой же файл в библиотеке "неверных шаблонов";
- если файл найден, берем новый шаблон с таким же именем;
- восстанавливаем новый заголовок »

Всё вроде так и есть. Подскажите пример как это сделать кодом. В общем я себе это представляю, а вот что конкретно писать не знаю.

amel27 08-12-2010 12:14 1560896

Цитата:

Цитата Tosyk
Подскажите пример как это сделать кодом. »

сначала, для каждого типа заголовка нужно создать пару файлов
Цитата:

DXT1_1024x1024.OLD
DXT1_1024x1024.NEW

DXT1_1024x512.OLD
DXT1_1024x512.NEW

DXT1_256x256.OLD
DXT1_256x256.NEW

DXT1_512x512.OLD
DXT1_512x512.NEW
...
это можно сделать НЕХ-редактором, либо на файле с нужным заголовком отработать команду типа:
Код:

dd bs=1c count=128 if="mcc001n2b.sdd" of="DXT5_2048x2048.old"
допустим, все *.OLD/*.NEW шаблоны лежат в каталоге с батником, а SDD-файлы в папке C:\TEST,
тогда батник по обработке может быть таким:
Код:

@echo off
SETLOCAL EnableDelayedExpansion

(for /r "C:\TEST" %%a in (*.sdd) do (
  dd bs=1c count=128 if="%%a" of="%~n0.tmp"2>nul
  set "$b="&for %%b in (*.old) do if not defined $b fc /b "%~n0.tmp" "%%b" >nul&& set "$b=%%~nb"
  if defined $b if not exist "!$b!.new" (echo File "!$b!.new" not found^^!) else (
    dd bs=1c count=128 if="!$b!.new" of="%%a"2>nul
    ren "%%a" "%%~na.dds"
)))


Tosyk 08-12-2010 13:53 1560982

Отлично, всё работает! А как заставить его:

1 - находить *. sdd файлы вглубь по каталогам и преобразовывать
2 - конвертировать файл при перетаскивании его на *.bat файл, конвертировать только этот файл, даже если в этом каталоге присутствуют другие

для первого это может быть вот так?:
Код:

@echo off
SETLOCAL EnableDelayedExpansion

(for /F "Tokens=*" %%a In ('Dir /B /S "*. sdd"') do (
  dd bs=1c count=128 if="%%a" of="%~n0.tmp"2>nul
  set "$b="&for %%b in (*.old) do if not defined $b fc /b "%~n0.tmp" "%%b" >nul&& set "$b=%%~nb"
  if defined $b if not exist "!$b!.new" (echo File "!$b!.new" not found^^!) else (
    dd bs=1c count=128 if="!$b!.new" of="%%a"2>nul
    ren "%%a" "%%~na.dds"
)))

а вот по второму пункту я даже незнаю что можно сделать.

amel27 08-12-2010 14:50 1561041

1. да вроде он итак должен искать в подкаталогах - см. "HELP FOR" для ключа /R:
Цитата:

FOR /R [[диск:]путь] %переменная IN (набор) DO команда [параметры]

Выполнение команды для каталога [диск:]путь, а также для всех
подкаталогов этого пути
. Если после ключа /R не указано имя каталога,
выполнение команды начинается с текущего каталога.
Если вместо набора указана только точка (.), команда выводит список
всех подкаталогов.

Tosyk 08-12-2010 14:53 1561044

Понятно, а как по второму пункту:

Цитата:

Цитата Tosyk
2 - конвертировать файл при перетаскивании его на *.bat файл, конвертировать только этот файл, даже если в этом каталоге присутствуют другие »

?

ДОБАВКА:
возможно ли сделать конвертирование из мастер файла, т.е. не создавать для каждого типа свой файл *.new и *.old?

ДОБАВКА2:
Мне кажется нужно воспользоваться вашим предложением
Цитата:

Цитата amel27
если определить интервалы размеров для каждого типа, то можно и по размеру »

потому что пар (*.new/*.old) уже набралось около 30, а размеры типов вариируются +/- 1 байт.

Если сделать подстановку по диапазону размеров, то как будет скрипт выглядеть?

ДОБАВКА3:
А вы знаете каконибудь компилятор bat/cmd что при его выполнении не мелькало окошко cmd (что происходит в большинстве таких программ), а чтобы появлялось окошко с заполняющейся полоской, как при инсталяции?

amel27 09-12-2010 13:28 1561807

Цитата:

Цитата Tosyk
а как по второму пункту »

решается без проблем разбором параметров командной строки батника

Цитата:

Цитата Tosyk
пар (*.new/*.old) уже набралось около 30, а размеры типов вариируются +/- 1 байт.
Если сделать подстановку по диапазону размеров, то как будет скрипт выглядеть? »

смысла большого не вижу - короче не будет, но будет запутанней сам алгоритм: сэкономим только на OLD-шаблонах (вместо них будет некое значение интервала), а правильное значение блока всё равно придется брать из NEW-шаблонов, кроме того встанет проблема соответствия между числом-интервалом и файлом NEW-шаблона

Цитата:

Цитата Tosyk
возможно ли сделать конвертирование из мастер файла, т.е. не создавать для каждого типа свой файл *.new и *.old? »

не совсем понял вопрос, всё равно перед сравнением придется выдергивать нужный блок из этого файла, а это дополнительные затраты на код и его выполнение... единственный достойный внимания вариант - хранить блоки в переменных самого батника (само собой, в HEX-виде), но для этого нужен достаточно мощный командный HEX-процессор (типа SFK), который мог бы считывать/записывать файловые блоки HEX <--> BIN, тогда блок данных батника мог бы быть таким (для одного типа):
Код:

set DXT5_2048x2048_OLD=205344440000007C000A1007000008000000080000400000000000000000000C
set DXT5_2048x2048_NEW=444453207C000000071008000008000000080000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000040000004458543500000000000000000000000000000000000000000010000000000000000000000000000000000000

P.S. здесь я предположил, что для идентификации типа файла достаточно первых 32 байт заголовка

Цитата:

Цитата Tosyk
А вы знаете каконибудь компилятор bat/cmd что при его выполнении не мелькало окошко cmd »

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

Tosyk 09-12-2010 17:32 1561997

Цитата:

Цитата amel27
извиняюсь, но не совсем понимаю, когда сначала выбирают консольный вариант исполнения задачи, а потом стараются стыдливо прятать его за оконный интерфейс... или ещё хлеще - насмотревшись вдоволь на унылый прогресс-бар, пытаются воспроизвести аналог консольного окошка, в которое тупо копипастят вывод скрытого CMD-окна »

Ну вобщем то выбрал консольный вариант потому что с ним удобнее управляться, и он более гибкий, как инструмент. А спрашиваю о преобразовании в оконный интерфейс потому, что делаю этот скрипт не для себя, а в основном для людей.

amel27 10-12-2010 11:29 1562481

Tosyk, мы уже обсудили три возможных подхода:

- на базе DD, библиотека шаблонов состоит из пар OLD/NEW файлов-заголовков;
- на базе DD, библиотека шаблонов состоит из пар: NEW-заголовок-файл + размер OLD-файла;
- на базе SFK, библиотека шаблонов состоит из пар HEX-переменных, описывающих NEW/OLD заголовки

- определитесь с выбором,
- сформируйте соответствующую библиотеку шаблонов (3-5 типов),
- создайте тестовую структуру каталогов (хотя бы по 1 файлу каждого типа),
- запакуйте и выложите в студию

только в этом случае имеет смысл двигаться дальше и ваять готовый код

Цитата:

Цитата Tosyk
с ним удобнее управляться, и он более гибкий, как инструмент. А спрашиваю о преобразовании в оконный интерфейс потому, что делаю этот скрипт не для себя, а в основном для людей. »

дело вкуса... но для GUI я бы выбрал что-нибудь типа HTA/AutoIT/AHK, а из них при желании можно задействовать все возможности CMD

Tosyk 14-12-2010 15:36 1565665

Прошу прощения за задержку.

Выкладываю архив с библитекой шаблонов и тестовой структурой файлов.

скачать тут

Как я уже упомянал выше: можно ли использовать информацию о размере файлов для определения типа?

вот что я исследовал:
Код:

4 kb - DXT1 64x64
12 kb - DXT1 128x128
44 kb - DXT1 256x256
171 kb - DXT1 512x512
172 kb - DXT1 512x512
342 kb - DXT5 512x512
683 kb - DXT1 1024x1024
684 kb - DXT1 1024x1024
1366 kb - DXT1 2048x1024
2732 kb - DXT1 2048x2048

если проводить изменение по заголовку то велика вероятность того, что я должен буду проверить HEX'ом все файлы или почти все (повторю, что их около 10000) на предмет различия в заголовках, чтобы не пропустить какой-то тип. А при этом сама суть задумки автоматизации пропадёт.

Если ту же операцию можно повторить с помощью SFK, но только кодом, то это предпочтительнее.

Посмотрел программы HTA/AutoIT/AHK, и что то не совсем понимаю, как с помощью них сделать простой прогресс-бар (

Tosyk 31-12-2010 03:41 1578205

Приветствую, прошу прощения за дабл-пост.

Уважаемый товарищ amel27, не хотелось бы останавливаться на пол пути.

sov44 21-10-2020 23:04 2937158

Подскажите способ, как заменить в autorun.dll все совпадения "sources\setup.exe" на "sources\set86.exe" и(или) "Sources\setep.exe" на "Sources\set86.exe", с сохранением в новый файл.

greg zakharov 22-10-2020 23:39 2937262

sov44, про bsdiff\bspacth что-нибудь знаете? bspacth, к слову, в инсталляторе JRE используется даже.

sov44 23-10-2020 00:10 2937264

Цитата:

Цитата greg zakharov
sov44, про bsdiff\bspacth что-нибудь знаете? bspacth, к слову, в инсталляторе JRE используется даже. »

greg zakharov, не знаком. Пытаюсь применить утилиту Swiss File Knife, но пока безуспешно.

upd. решено
Код:

@echo off
>nul copy /y autorun.dll out.dll

sfk197.exe rep out.dll -bin /6F00750072006300650073005C00730065007400750070002E00650078006500/6F00750072006300650073005C00730065007400380036002E00650078006500/ -yes

pause
exit


m0nkrus 04-11-2021 11:07 2970680

Задача следующая: у всех файлов в папке удалить первый байт!

Мне уже предложили скрипт на PowerShell. И он даже неплохо работает, пока размер обрабатываемого файла не превышает некую критическую величину около 100 Мб. Там происходит переполнение массива и вылет в ошибку. Поэтому хотелось бы какую-то альтернативу.

DD пробовал - тоже проблема с большими файлами. Вот команда:
Код:

dd bs=1c skip=1 if="file1" of="file2" --progress
Файл взял на 525 Мб. За те 2 часа, что я ждал завершения операции, было переработано примерно 250 Мб. Все из-за того, что размер блока устанавливается для всего единый. То есть установил я 1 байт для изъятия, вот программа и перерабатывает дальше громадный файл по одному байту....

Есть какие-то более подходящие решения под мой запрос?

Iska 04-11-2021 11:23 2970684

m0nkrus, вышеуказанный Swiss File Knife download | SourceForge.net не рассматривали?

YuS_2 04-11-2021 11:38 2970686

Цитата:

Цитата m0nkrus
пока размер обрабатываемого файла не превышает некую критическую величину около 100 Мб. »

Для того, чтобы такого не происходило, есть разные способы чтения файлов... например, потоковое чтение io.streamreader, вполне возможно считывать файл размером и больше гигабайта, не говоря уже про мегабайты...

Что-то типа:
Код:

$file = 'test.tst'
$out = 'out.tst'
$reader = [io.streamreader]::new($file)
$writer = [io.streamwriter]::new($out)
$reader.basestream.position = 1
while ($reader.basestream.position -lt $reader.basestream.length){
        $writer.basestream.writebyte($reader.basestream.readbyte())
}
$reader.basestream.close()
$writer.basestream.close()

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

m0nkrus 04-11-2021 13:54 2970697

Iska, не очень представляю, какой синтаксис мне в этой этой программе мог бы помочь...


YuS_2, я честно скажу: я сам лично в PowerShell ни в зуб ногой. Вот скрипт, вашего же, кстати, производства, что я сейчас использую: http://forum.oszone.net/post-2956811.html#post2956811
Если сможете порекомендовать, как его усовершенствовать, чтобы он работал и с большими файлами, я буду только рад! Только давайте тогда в той теме и продолжим. Здесь все-таки шел запрос на CMD /BAT.

P.S. Задача не разовая, увы. Поэтому и задалбывает каждый раз выдергивать из массива большие файлы, чтобы в них вручную через HxD срезать этот чертов байт, после чего возвращать их назад, пытаясь не ошибиться в дереве папок.

YuS_2 04-11-2021 18:36 2970716

Цитата:

Цитата m0nkrus
Только давайте тогда в той теме и продолжим. »

смотрите в той теме...

Serguei Kouzmine 06-11-2021 05:49 2970910

неужели никто не смотрел
https://stackoverflow.com/questions/...g-dds-textures
2
ссылки
оттуда:


бат файлы и кмд не потянут а по какой нибудь из приведенных неаерняка просто есть решение на высоком уровне без копания в хексе
...

All these links are related to reading and converting DDS image.

https://github.com/Dahie/DDS-Utils

http://www.javaworld.com/javaworld/j...43.html?page=1

http://www.omg.org/spec/DDS-Java/1.0/Beta2/

https://www.java2s.com/Open-Source/J...xture.java.htm

http://code.google.com/p/java-dds/

http://nuicode.svnrepository.com/svn...Converter.java

http://www.guyford.co.uk/showpage.ph..._Image_in_JOGL


Время: 15:13.

Время: 15:13.
© OSzone.net 2001-