Top.Mail.Ru
Ответы
Аватар пользователя
Изменено
Аватар пользователя
Аватар пользователя
Программирование
+1

Сценарий на VBScript

Напишите мне VBS скрипт, который изменит последний байт указанного мной файла на случайное ненулевое значение (от 01 до FF).

Также желательна оптимизированная реализация скрипта для больших файлов (чтобы скрипт мог обрабатывать файлы весом несколько мегабайт и при этом при выполнении не тратить на это много времени и не занимать много места в RAM).

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

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

Дополнен

Модер удали мой вопрос
Чуваки накидайте репортов

По дате
По рейтингу
Аватар пользователя
Ученик
2мес

Const adTypeBinary = 1
Const adModeReadWrite = 3

Dim filePath, newByte

' Получаем путь к файлу от пользователя
filePath = InputBox("Введите полный путь к файлу:", "Выбор файла")

If filePath = "" Then
MsgBox "Операция отменена пользователем"
WScript.Quit
End If

' Создаем объект для работы с файлом
Set objStream = CreateObject(" ADODB.Stream ")
objStream.Type = adTypeBinary
objStream.Open

' Открываем файл в режиме чтения/записи
objStream.LoadFromFile filePath
objStream.Position = objStream.Size - 1

' Генерируем случайное значение от 1 до 255
Randomize
newByte = CByte(Int(Rnd * 255) + 1)

' Записываем новый байт
objStream.Write newByte
objStream.Flush
objStream.Close

MsgBox "Последний байт успешно изменен на " & Hex(newByte)

Аватар пользователя
Ученик
2мес

FilePath = "C:\path\to\your\file.bin"
Function GetRandomNonZeroByte()
GetRandomNonZeroByte = Int((255 * Rnd) + 1)
End Function
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(FilePath, 2, False, -1) ' 2 = ForWriting, -1 = TristateUseDefault
FileSize = objFSO.GetFile(FilePath).Size
strFileContent = objFile.Read(FileSize)
objFile.Close
RandomByte = Chr(GetRandomNonZeroByte())
If FileSize > 0 Then
Mid(strFileContent, FileSize, 1) = RandomByte
Else
WScript.Echo
WScript.Quit
End If
Set objFile = objFSO.OpenTextFile(FilePath, 2, False, -1)
objFile.Write strFileContent
objFile.Close

WScript.Echo
Set objFile = Nothing
Set objFSO = Nothing
на Python

Удаленный ответ Ответ удалён
Аватар пользователя
Знаток

Randomize
Const ForReading = 1
Const ForWriting = 2

Dim objFS, objFile, fileSize, randomByte

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.OpenTextFile("путь_к_вашему_файлу", ForReading, False)
fileSize = objFile.Size
objFile.Close

Set objFile = objFS.OpenTextFile("путь_к_вашему_файлу", ForWriting, True)

If fileSize > 0 Then
Randomize
randomByte = Chr(Int((254 * Rnd) + 1)) ' Генерация случайного значения для последнего байта (от 01 до FE)
objFile.Write objFile.ReadAll ' Записываем все, кроме последнего байта
objFile.Write randomByte ' Записываем случайное значение для последнего байта
End If

objFile.Close
Set objFS = Nothing
Set objFile = Nothing


Прежде чем запускать скрипт, замените "путь_к_вашему_файлу" на путь к вашему файлу.

Аватар пользователя
Мудрец

VBScript с winapi не работает, нужна внешняя библиотека типо DynamicWrapperX там и можно писать патч программы.