Форум программистов, компьютерный форум, киберфорум
Наши страницы

Модификация записи в файле структур - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разработать тип данных graf, определив для него операции добавления и вычитания http://www.cyberforum.ru/cpp-beginners/thread273955.html
помогите срочно нужно!!! разработать тип данных graf, определив для него операции добавления и вычитания!!
C++ Класс-Контейнер Вектор Вставить новый элемент после всех элементов, кратных своему номеру http://www.cyberforum.ru/cpp-beginners/thread273950.html
C++ как переделать?
нужно как-то зделать тоже самое только методом касательных. #include<stdio.h> #include<conio.h> #include<math.h> float function(float x) { float h;
Сортировка массива по методу убывания? C++
Массив B сформировать по правилу b = sqrt(fabsf(i * i - a)), где a=25.8. Найти сумму элементов с номерами с 5-го по 10-ый, упорядочить эти элементы по убыванию и найти произведение элементов Bi <...
C++ Найти длину самого короткого слова http://www.cyberforum.ru/cpp-beginners/thread273943.html
Даны слова, разделенные пробелами. Найти длину самого короткого слова.
C++ Определение контекста устройства Приветствую всех! Вопрос в следующем: есть строка DC_Handle=CreateDC("Display",NULL,NULL,NULL); и эквивалентная ей: DC_Handle := CreateDC('Display', nil, nil, nil); С++ вызов выдает отрицательное... подробнее

Показать сообщение отдельно
DKOI
24 / 24 / 1
Регистрация: 08.09.2010
Сообщений: 136

Модификация записи в файле структур - C++

10.04.2011, 22:21. Просмотров 266. Ответов 0
Метки (Все метки)

Необходимо удалить запись из произвольной точки файла. Написал код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void delete_record()
{
    SONG tmp; 
        // #define SONG_SIZE sizeof(SONG)
    long delete_item_pos = (current_start + (current_line -3 ) / 2) * SONG_SIZE; 
    long next_item = delete_item_pos + SONG_SIZE;
    if (delete_item_pos < file_size * SONG_SIZE) {
        while (next_item < (file_size * SONG_SIZE)) {
            fseek(base,next_item,SEEK_SET);
            fread((char*)&tmp, SONG_SIZE, 1, base);
            fseek(base,delete_item_pos,SEEK_SET);
            fwrite((char*)&tmp, SONG_SIZE, 1, base);
//          fseek(base,delete_item_pos,SEEK_SET);
//          fflush(base);
            delete_item_pos += SONG_SIZE;
            next_item += SONG_SIZE;
        }   
        file_size--;
        chsize(_fileno(base), file_size * SONG_SIZE);
    }
}
Но при этом после выполнения fwrite данные не записываются в текущую позицию, а висят в буфере (fwrite Возвращает единицу) и после, при других операциях вывода или при закрытии, выводится в конце файла. Однако если раскоментировать fseek/fflush строки, это не решает проблемы, потому что все равно данные, при опустошении буфера, ставятся в конец файла! Подскажите, что я делаю не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru