Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Поиск на MQL5.community ведется во всех разделах. Попробуй сам!
Макс
49
Макс 2014.09.12 17:51 

Всем привет.

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

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

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

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

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

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

Vadim Zhunko
5220
Vadim Zhunko 2014.09.12 18:19  

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

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

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

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

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

Макс
49
Макс 2014.09.12 18:35  

FileResize

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

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

:)

Yuriy Zaytsev
11651
Yuriy Zaytsev 2014.09.13 08:56  
GalaX:

Всем привет.

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

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

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

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

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

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

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

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

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

Dmitry Fedoseev
41208
Dmitry Fedoseev 2014.09.13 10:44  
AlexeyVik:

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

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


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

Комбинатор
15645
Комбинатор 2014.09.13 11:00  
AlexeyVik:

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

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

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

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

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