| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Структура и файл |
| Автор: HELPER 15.5.2005, 12:31 | ||
| Как удалить структуру из файла (без использования еще одного файла). Короче:
Ненадо кода писать, просто дайте какунить наводку, или функцию, которая ета сделает... |
| Автор: kometa_triatlon 15.5.2005, 13:13 |
| Ну удобнее всего переписать в другой файл конечно без этой структуры. Если оперативка позволяет, можно считать весь файл в массив структур, а потом в этот же файл и записать, опять же без одной структуры. Если так не хочешь, есть вариант, предложенный Дейтелом: Вобщем сразу создается файл примером на 100 структур. И записывается 100 ПУСТЫХ структур. Если это число, значит 0, если строка, то пустая. Ну и при считывании это надо учитывать: игнорировать такие пустые структуры. Тогда удобно работать с любой частью файла. Если надо добавить 20-ую структуру, которой "типа" не было, переходим на нее и записываем нужную инфу. Если нужно удалить, записываем поверх удаляемой пустую. Если нужно добавить новую с номером 120, добавляем еще 19 пустых структур и 120-ую с инфой. Ну вобщем так. Если место на винте позволяет, и мало таких пропусков, то очень удобно. Все-таки, если файлы по 50 метров и нужно удалить одну структуру, то вариант с переписыванием файла в новый и переименованием в новый не канает |
| Автор: HELPER 15.5.2005, 13:47 |
| Елки, а помоему как-то подругому можно... Например в паскале есть функция truncate - она все от файлового указателя до конца стирает.... А в С альтернативы нет-что ли??? |
| Автор: HELPER 15.5.2005, 16:29 |
| аааааааааааааааа!! Где ответы? - нету... Где советы? - тоже нету.... Где все хорошие прграммисты??? - ... Что никто не знает как удалить структуру??? |
| Автор: kometa_triatlon 15.5.2005, 20:59 | ||
Так что тебе даст truncate? Это если только последнюю структуру удалить нужно. А если любую?
Смотри выше |
| Автор: HELPER 16.5.2005, 08:26 | ||
Как-ето что даст???? Сдвигать каждую i на i-1 а потом удалить последнюю... Короче: Файл: (в нем структуры) s1, s2, s3, s4, s5, s6,s7 Надо удалить s3: s1,s2, s3<-s4, s4<-s5, s5<-s6, s6<-s7, s7 Потом указатель на последнюю, и truncate... Файлов в 50 кг не будет так-что для данной задачи способ рациональный, наверно |
| Автор: _hunter 16.5.2005, 12:22 |
| HELPER, она и в С есть int truncate (const char*filename, off_t length); |
| Автор: HELPER 16.5.2005, 14:18 |
| Спасибо _hunter слепой я балбес... =)) Добавлено @ 14:24 хотя....чето библиотека у нее какая??, а то что-то function truncte must have a prototype... |
| Автор: _hunter 16.5.2005, 15:48 |
| упс... она самописная... вот темы: http://forum.vingrad.ru/index.php?showtopic=38694 http://forum.vingrad.ru/index.php?showtopic=35612 |
| Автор: HELPER 16.5.2005, 19:46 |
| Да уж... А если сделать надо в досе?? т.е. в BC, TC.... Уже 10 дней инфу ищу..... |
| Автор: Artemon 20.5.2005, 15:02 |
| Если ты говоришь, что 50кг инфы не будет, то надо считывать все структуры из файла в массив структур, а затем записывать все эти структуры, за исключением ненужной обратно в файл. |
| Автор: HELPER 20.5.2005, 19:34 |
| Ну да, дельный совет...особенно, когда _hunter уже все сказал и расписал и ссылки дал... =) |