Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: удаление записи из файла на C/C++

Сообщения:  [1-10]   [11-19] 

 
 автор: psychomc   (21.10.2009 в 12:25)   письмо автору
 
   для: psychomc   (20.10.2009 в 17:50)
 

уря! посидел сегодня полчаса и сделал!
// размер строки структуры
                    s = sizeof(prod);
                    
                    
                                        
                    // переходим на начало строки
                    fseek(tf,-s,1);
                    
                    // сохраняем текущее значение указателя
                    curpos = ftell(tf);
                    
                    // переходим в конец файла
                    fseek(tf, 0L, SEEK_END);
                    
                    // переходим на начало последней строки
                    fseek(tf,-s,1);
                    
                    // считываем последнюю запись
                    fread(&savezap, s, 1, tf);
                    
                    // возвращаем указатель на перезаписываемую запись
                    fseek(tf, curpos, SEEK_SET);
                    
                    // записываем последнюю запись на место удаляемой
                    fwrite(&savezap[0], s, 1, tf);
                    
                    // дескриптор файла
                    handle = fileno(tf);
                    
                    // размер файла
                    fs = filelength(handle);
                    
                    // обрезаем последнюю запись
                    chsize(handle,fs-s);


всё было как бы не так и сложно :)
огромное спасибо Trianon-у!

  Ответить  
 
 автор: psychomc   (20.10.2009 в 17:50)   письмо автору
 
   для: psychomc   (20.10.2009 в 17:43)
 

а, всё, нашёл, функция chsize :)
буду пытаться :)
в любом случае - спасибо Вам за идею

  Ответить  
 
 автор: psychomc   (20.10.2009 в 17:43)   письмо автору
 
   для: psychomc   (20.10.2009 в 17:32)
 

прочитал на одном форуме:

>А по старинке файл срезали записью в него 0 байт. Ну, т.е. lseek(где_резать); write(file, buf, 0);

скажите, такое пройдет?

  Ответить  
 
 автор: psychomc   (20.10.2009 в 17:32)   письмо автору
 
   для: Trianon   (20.10.2009 в 17:14)
 

>Модератора благодарите. :)
а я думал это я слепой, и что Вы ничего не предложили а решили поиздеваться :)

>если запись из файла удалена, значит файл должен стать на одну запись короче, так?
согласен
но это всё барахло делаю в borland c++ 3.1, и в Help'е не вижу такой функции и соответвенно не понимаю как её юзать. в гугле пока тоже ничего не нарыл...
такое чувство что придется заходить с другой стороны :(
просто сначала хотелось как можно проще и грамотнее реализовать. тот вариант что написал Волки я вообще не понял.

  Ответить  
 
 автор: Trianon   (20.10.2009 в 17:14)   письмо автору
 
   для: psychomc   (20.10.2009 в 14:10)
 

>извиняюсь, не увидел вашего сообщения.

Модератора благодарите. :)


>начало понятно, только объясните плиз смысл и как реализуется вот это:
>>после чего укоротить файл по позиции начала последней записи
>?

если запись из файла удалена, значит файл должен стать на одну запись короче, так?

Это смысл.
А реализация... переносимой реализации некоторое время назад не было... Возможно, нету и сейчас. Тут надо смотреть инструментарий выбранной среды исполнения. То есть набор функций работы с файлами, которым можно пользоваться.
http://www.google.ru/search?hl=ru&q=ftruncate

  Ответить  
 
 автор: psychomc   (20.10.2009 в 14:10)   письмо автору
 
   для: Trianon   (20.10.2009 в 10:35)
 

извиняюсь, не увидел вашего сообщения.
начало понятно, только объясните плиз смысл и как реализуется вот это:
>после чего укоротить файл по позиции начала последней записи
?

  Ответить  
 
 автор: psychomc   (20.10.2009 в 13:40)   письмо автору
 
   для: Волки   (20.10.2009 в 13:23)
 

никак не могу считать файл полностью с этой позиции

  Ответить  
 
 автор: Волки   (20.10.2009 в 13:23)   письмо автору
 
   для: psychomc   (20.10.2009 в 12:46)
 

sizeof (prod) = 48 байт, что кратно 8 .
> так можно ли в таком случае записать переместив?
Да, думаю можно, пробовать надо, дебугером.

  Ответить  
 
 автор: psychomc   (20.10.2009 в 12:46)   письмо автору
 
   для: Волки   (20.10.2009 в 12:39)
 

>и кстати, у вас структура выравнена по границе 8 байт?
на этот вопрос у меня нет ответа т.к я не понял о чём Вы :(

указатель вот так получается возвратить обратно:

fseek(tf,-sizeof(prod),1);


так можно ли в таком случае записать переместив?

  Ответить  
 
 автор: Волки   (20.10.2009 в 12:39)   письмо автору
 
   для: psychomc   (20.10.2009 в 12:12)
 

> записать с помощью fwrite с этой позиции
с этой позиции нельзя, т.к. считав информацию про конкретный товар - указатель передвинулся, и надо вернуть назад на "размер товара"
а внутрь функции передается идентификатор удаляемой записи.
и кстати, у вас структура выравнена по границе 8 байт?

  Ответить  

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования