Бинарные файлы, удаление записи

 

Всем привет.

Вообщем такой вопрос:

Например, есть файл из N записей (у меня структуры), я хочу удалить последнюю запись.

Вопрос в том, что нужно "затереть" последнюю запись (какое-то кол-во байт)... т.е. как бы записать NULL на это место.

Алтернативный вариант:

Перезаписать в новый файл все данные кроме последних N байт, а потом новый файл переименовать в прежнее имя.

Но на мой взгляд будет более удобнее просто размер файла уменьшить на эти N байт. Возможно ли это?

 

Да, можно. WinAPI. Сначала файловый указатель ставите, куда надо. Потом это -> SetEndOfFile(). Файл обрезается по файловому указателю.

Здесь есть функция:

// 2.9. Функция устанавливает размер файла.
void FileResize(int   hFile,      // Системный дескриптор файла.
                ulong ulNewSize); // Новый размер файла.
В ней всё уже есть.
 

Круто! Пасиба ;)))

Я WinAPI + MQL до этого не пользовался... ща будем )

 

FileResize

хм, исчо интереснее - думаю эту библиотеку в первую очередь поюзать )

ZhunkoSendMsg("Спасибо!");

:)

 
GalaX:

Всем привет.

Вообщем такой вопрос:

Например, есть файл из N записей (у меня структуры), я хочу удалить последнюю запись.

Вопрос в том, что нужно "затереть" последнюю запись (какое-то кол-во байт)... т.е. как бы записать NULL на это место.

Алтернативный вариант:

Перезаписать в новый файл все данные кроме последних N байт, а потом новый файл переименовать в прежнее имя.

Но на мой взгляд будет более удобнее просто размер файла уменьшить на эти N байт. Возможно ли это?

Элементарно открываем исходный файл используя WinAPI, создаем второй файл приемный с каким то именем другим естественно И просто копируем во второй количество байт минус те которые желаете обрезать Закрываете оба файла и входящий файл Удаляете а тот в который копировали приемный переименовываете в то имя каким был исходный...
 

Парни, а почему WinAPI разве нельзя обойтись средствами MQL4

Открыть файл с флагом FILE_BIN и сделать с ним всё что нужно. Или речь о других бинарных файлах?

 
AlexeyVik:

Парни, а почему WinAPI разве нельзя обойтись средствами MQL4

Открыть файл с флагом FILE_BIN и сделать с ним всё что нужно. Или речь о других бинарных файлах?


Конечно можно. 

 
AlexeyVik:

Парни, а почему WinAPI разве нельзя обойтись средствами MQL4

Открыть файл с флагом FILE_BIN и сделать с ним всё что нужно. Или речь о других бинарных файлах?

Среди штатных функций нету функции для изменения размера файла.

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

Причина обращения: