Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структура и файл, Как удалить... 
:(
    Опции темы
HELPER
Дата 15.5.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 18.4.2005

Репутация: -2
Всего: -2



Как удалить структуру из файла (без использования еще одного файла).
Короче:

Код

struct s {
int a, b, c;
};
//--------
FILE *f;
f = fopen("bla.bla","rb+");
//запись нескольких s в файл с помощью fwrite

//а тут надо удалить структуру по ее номеру...


Ненадо кода писать, просто дайте какунить наводку, или функцию, которая ета сделает...
PM MAIL   Вверх
kometa_triatlon
Дата 15.5.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 384
Регистрация: 7.1.2005
Где: Киев

Репутация: 2
Всего: 6



Ну удобнее всего переписать в другой файл конечно без этой структуры.
Если оперативка позволяет, можно считать весь файл в массив структур, а потом в этот же файл и записать, опять же без одной структуры.

Если так не хочешь, есть вариант, предложенный Дейтелом:
Вобщем сразу создается файл примером на 100 структур. И записывается 100 ПУСТЫХ структур. Если это число, значит 0, если строка, то пустая.
Ну и при считывании это надо учитывать: игнорировать такие пустые структуры. Тогда удобно работать с любой частью файла. Если надо добавить 20-ую структуру, которой "типа" не было, переходим на нее и записываем нужную инфу. Если нужно удалить, записываем поверх удаляемой пустую. Если нужно добавить новую с номером 120, добавляем еще 19 пустых структур и 120-ую с инфой. Ну вобщем так. Если место на винте позволяет, и мало таких пропусков, то очень удобно. Все-таки, если файлы по 50 метров и нужно удалить одну структуру, то вариант с переписыванием файла в новый и переименованием в новый не канает smile


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
HELPER
Дата 15.5.2005, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 18.4.2005

Репутация: -2
Всего: -2



Елки, а помоему как-то подругому можно... smile
Например в паскале есть функция truncate - она все от файлового указателя до конца стирает....
А в С альтернативы нет-что ли??? smile
PM MAIL   Вверх
HELPER
Дата 15.5.2005, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 18.4.2005

Репутация: -2
Всего: -2



аааааааааааааааа!! smile
Где ответы? - нету...
Где советы? - тоже нету....
Где все хорошие прграммисты??? - ...

Что никто не знает как удалить структуру???
PM MAIL   Вверх
kometa_triatlon
Дата 15.5.2005, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 384
Регистрация: 7.1.2005
Где: Киев

Репутация: 2
Всего: 6



Так что тебе даст truncate? Это если только последнюю структуру удалить нужно. А если любую?

Цитата
Где ответы? - нету...
Где советы? - тоже нету....
Где все хорошие прграммисты??? - ...

Смотри выше smile


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
HELPER
Дата 16.5.2005, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 18.4.2005

Репутация: -2
Всего: -2




Цитата(kometa_triatlon @ 15.5.2005, 20:59)
Так что тебе даст truncate?


Как-ето что даст???? smile smile smile

Сдвигать каждую i на i-1 а потом удалить последнюю...
Короче:
Файл: (в нем структуры)
s1, s2, s3, s4, s5, s6,s7
Надо удалить s3:

s1,s2, s3<-s4, s4<-s5, s5<-s6, s6<-s7, s7

Потом указатель на последнюю, и truncate...

Файлов в 50 кг не будет так-что для данной задачи способ рациональный, наверно smile

PM MAIL   Вверх
_hunter
Дата 16.5.2005, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



HELPER, она и в С есть smile
int truncate (const char*filename, off_t length);


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
HELPER
Дата 16.5.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 18.4.2005

Репутация: -2
Всего: -2



Спасибо
_hunter
слепой я балбес... =))
Добавлено @ 14:24
хотя....чето библиотека у нее какая??, а то что-то
function truncte must have a prototype... smile
PM MAIL   Вверх
_hunter
Дата 16.5.2005, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98





--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
HELPER
Дата 16.5.2005, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 18.4.2005

Репутация: -2
Всего: -2



Да уж... smile
А если сделать надо в досе?? т.е. в BC, TC.... smile smile smile
Уже 10 дней инфу ищу.....
PM MAIL   Вверх
Artemon
Дата 20.5.2005, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Если ты говоришь, что 50кг инфы не будет, то надо считывать все структуры из файла в массив структур, а затем записывать все эти структуры, за исключением ненужной обратно в файл.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
HELPER
Дата 20.5.2005, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 18.4.2005

Репутация: -2
Всего: -2



Ну да, дельный совет...особенно, когда
_hunter
уже все сказал и расписал и ссылки дал... =)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0509 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.