Пример организации работы с файлом
Например какой-нибудь справочник, содержащий разнородные записи, с уникальным идентификатором для каждой записи.
Собственно вопросов несколько:
1. Как сабж грамотно организовать, т.е. структуру файла?
2. Как грамотно реализовать с использованием WinAPI функций?
по 1 вопросу полагаю нужно записывать счётчик в заголовок файла чтобы при добавлении записи, присваивать ей уникальный идентификатор (считываем значение счётчика, увеличиваем на единицу, присваиваем идентификатору записи, перезаписываем в файле значение счётчика), сама запись (помимо данных) содержит размер всей записи, плюс размеры каждого поля записи (получаем через strlen, приводим к DWORD)
по 2 вопросу полагаю нужно размеры записей, а также значения счётчика как-то грамотно записывать-считывать? Т.е. если переменная буфера функций ReadFile, WriteFile имеет тип const void * то целочисленные значения длин записей (и счётчика) необходимо как-то преобразовать?
И вообще насколько я правильно представляю себе такой подход? Может такие вещи реализовываются как-то по другому?
Нигде не могу найти примеров кода подобной реализации (есть, конечно исходники серьёзных приложений СУБД, но мне до них как пешком до Китая, а что-то попроще, типа телефонный справочник или там, записная книжка...), если кто-нибудь приведёт пример или кинет ссылку буду весьма признателен.
P.S. Чуть не забыл: интересует пример для Borland C++ Builder, на Delphi почему-то примеры попадаются чаще (там файлы типизированные, может по-этому...)
Цитата: *Denis
1. Как сабж грамотно организовать, т.е. структуру файла?
Вполне можно и так как ты пишешь. Только зачем тебе ID записей?
Цитата: *Denis
если переменная буфера функций ReadFile, WriteFile имеет тип const void * то целочисленные значения длин записей (и счётчика) необходимо как-то преобразовать?
Нет. Надо просто передать на них указатель (передать их адрес) и их размер - sizeof(). Это в отношении переменных счетчика и длины.
Можно в начале (а может в конце/середине) хранить табличку на начала каждой записи в файле. Это если потребуется ускорение поиска конкретной записи.
Есть такой интересный формат как XML. Хотя если хочешь двоичный, то может тебе оно и не надо..