Что нового

Error allocating memory при чтении/записи в файл с флагом 16

Skif_off

Знающий
Сообщения
173
Репутация
12
Задача: убрать BOM у файла в кодировке UTF-16 LE.
По подсказке читаю в бинарном режиме начиная с третьего символа, сначала делал копию исходного файла
Код:
$hFile = FileOpen($CmdLine[1], 16)
If $hFile = -1 Then
    MsgBox(4096, 'Ошибка', 'Невозможно открыть файл')
    Exit
EndIf
FileSetPos($hFile, 2, 0)
$bText = FileRead($hFile)
FileClose($hFile)

$hFileWithoutBOM = FileOpen(@TempDir & '\' & $s_TempName & '.txt', 2+16)
If $hFile = -1 Then
    MsgBox(4096, 'Ошибка', 'Не удалось создать новый (без BOM) файл')
    Exit
EndIf
FileWrite($hFileWithoutBOM, $bText)
FileClose($hFileWithoutBOM)
но потом было решено объединить
Код:
$hFile = FileOpen($CmdLine[1], 2+16)
If $hFile = -1 Then
    MsgBox(4096, 'Ошибка', 'Невозможно открыть файл')
    Exit
EndIf
FileSetPos($hFile, 2, 0)
$bText = FileRead($hFile)
FileSetPos($hFile, 0, 0)
FileWrite($hFile, $bText)
FileClose($hFile)
И получаю ошибку Error allocating memory, проверено на версиях 3.3.8.1 и 3.3.12.0. Не понимаю, почему? Ведь читается тот же файл.
Размер тестового файла - 0 (ноль в свойствах файла :smile:) байт (тесктовый файл, две строки: первая с текстом, вторая пустая).
С флагами 1+16 работает, но в конце файла добавляется пустая строка.

З.Ы. Теоретически пустая строка ничем не грозит (к тому же одна уже есть), в крайнем случае можно попытаться заменить в конце файла "0A 00 0A 00" на "0A 00" (но если только не дергая весь файл, т.к . на файле размером 3,61 Мб времени уйдет уже не менее 25 мс).
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Skif_off,
Вы сначала обнуляете файл, а потом пытаетесь установить уже несуществующую позицию и читать файл. ИМХО, из-за этого ошибка.
 
Автор
S

Skif_off

Знающий
Сообщения
173
Репутация
12
madmasles
Спасибо, добавил функцию FileGetSize - так и есть. Я думал, что файл обнулиться только перед записью.
 
Верх