1

Тема: AHK: "Прямое" изменение данных в файле. По типу HEX-редактора.

Приветствую друзья!
Помогите в решении следующей задачи:
Есть файл, предположим на 10Gb.
Необходимо изменить сигнатуру файла (первые 5 символов в файле) без перезаписи всего файла (т.к. это крайне долго).
Как это можно реализовать?

Пробовал так:


Myfile := fileOpen("D:\TEST.DAT", "rw")
Myfile.Seek(0)
Myfile.RAWWrite("mydata",6)

Не работает. Пытался читать документацию с этой страницы: https://autohotkey.com/docs/objects/File.htm
Но что-то я так и не врубился, как это реализовать.


P.S> Что-то похожее было тут: https://autohotkey.com/board/topic/80209-filerawwrite-help/
но и этот пример у меня не работает.

P.S.S> Использую AHKL

2

Re: AHK: "Прямое" изменение данных в файле. По типу HEX-редактора.

mydata := "mydata"
Myfile.RawWrite(mydata, 6)

— Впрочем, только для ANSI-выпуска — для Unicode каждый знак занимает по 2 байта, т.е. из строки "mydata" будут взяты только коды трёх первых знаков чередующиеся с нулевыми байтами.

3

Re: AHK: "Прямое" изменение данных в файле. По типу HEX-редактора.

wisgest пишет:

— Впрочем, только для ANSI-выпуска — для Unicode каждый знак занимает по 2 байта, т.е. из строки "mydata" будут взяты только коды трёх первых знаков чередующиеся с нулевыми байтами.

Так не работает даже для ANSI файла
Как реализовать то?

Я тут немного с мертвой точки сдвинулся.
Т.к. мне нужно редактировать только начало файла, то меня устроит и просто Write.
Для ANSI файла такой код работает:


Myfile := fileOpen("D:\TEST.DAT", "rw")
Myfile.write("TEST00")
Myfile.close

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

4

Re: AHK: "Прямое" изменение данных в файле. По типу HEX-редактора.

Real Root пишет:

Так не работает даже для ANSI файла
Как реализовать то?

Речь была не об ANSI-файле, а об ANSI-версии AutoHotkey.

Эта сигнатура файла — всегда ANSI-строка или может быть набор любых байтов?

5

Re: AHK: "Прямое" изменение данных в файле. По типу HEX-редактора.

Сигнатура файла вроде как всегда ANSI строка.
Там по-умолчанию MSWIM, мне нужно на что-то свое менять, и потом опять на MSWIM.
Сам файл бинарный.

6 (изменено: ypppu, 2016-02-15 17:35:06)

Re: AHK: "Прямое" изменение данных в файле. По типу HEX-редактора.

Вопрос решен!
Нашел вот такой код:


WriteHex("out3.txt", 0xC0, 0x01, 0x80, 0x07)


WriteHex(file, hex*)
{
  file := FileOpen(file, "w")
  for k,v in hex
    file.WriteUChar(v)
  file.Close()
}

Взято отсюда: https://autohotkey.com/board/topic/9439 … raw-write/

Что нужно писать можно и по таблице посмотреть, но проще набрать нужный текст и глянуть WinHEX-ом.
Всем большое спасибо за участие.

7

Re: AHK: "Прямое" изменение данных в файле. По типу HEX-редактора.

Небольшое уточнение, для записи в существующий файл, FileOpen нужно вызывать с rw.
Остается открытым вопрос, как писать нужные данные не в начало файла.
Мне это не нужно, но для коллекции было бы полезно знать.

8

Re: AHK: "Прямое" изменение данных в файле. По типу HEX-редактора.

Метод Seek использовать. У вас же в коде он был.

9

Re: AHK: "Прямое" изменение данных в файле. По типу HEX-редактора.

Real Root, ссылки оформляются тегом URL. Я поправил Ваше сообщение.