Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Макс
49
Макс  

Всем привет.

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

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

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

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

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

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

Vadim Zhunko
5226
Vadim Zhunko  

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

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

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

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

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

Макс
49
Макс  

FileResize

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

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

:)

Yuriy Zaytsev
15123
Yuriy Zaytsev  
GalaX:

Всем привет.

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

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

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

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

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

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

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

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

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

Dmitry Fedoseev
43508
Dmitry Fedoseev  
AlexeyVik:

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

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


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

Комбинатор
16034
Комбинатор  
AlexeyVik:

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

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

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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий