Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Чтение/запись в один и тот же файл


Автор: tonhead 9.5.2010, 16:30
Всем здравствуйте.

Передо мной стоит задача: считывать данные из текстового файла блоками (тип данных float), обрабатывать блок, записывать блок обратно в тот же файл (на место откуда он был считан), переходить к следующему блоку. К примеру, если в файле 100 чисел, размер блока 50, то я читаю первые 50 чисел, обсчитываю их, и записываю обратно в тот же файл в позиции 0-49; затем читаю числа начиная с 50го, обсчитываю их, записываю в тот же файл в позиции 50-99.

Как это можно осуществить? Пока для чтения я использую код:

Код

float f;
FILE * pFile;
pFile = fopen (fileName.c_str(),"r");
fscanf (pFile, "%f", &f);


Существует ли возможность осуществлять движение по файлу (от одного числа float к другому)? Какие вообще рекоммендации можете дать?

Автор: djamshud 9.5.2010, 16:48
Чтение и запись - r+, a+ (параметры fopen).
Движение по файлу (побайтово!) - fseek.
Читать, писать - fread, fwrite.

Автор: tonhead 11.5.2010, 16:48
А существует возможность вставить данные внутри файла, без замены текста?
Например, выполнение

Код

 fputs ( "This is an apple." , pFile );
 fseek ( pFile , 9 , SEEK_SET );
 fputs ( " sam" , pFile );


привело бы к "This is an  samapple." а не "This is a sample." (как в примере с сайта сплюсплюс.ком).

Потому что в моем случае скорее всего неизвестно будет, сколько байт будет занимать блок, и проще было бы запомнить положение указателя в начале блока, положение указателя в конце блока, потом как то удалить его (блок) - тоже вопрос как это сделать - , и уже затем вставить новый кусок в положение указателя в начале блока.

Автор: djamshud 11.5.2010, 17:15
tonhead, вручную придется делать. Вот http://forum.vingrad.ru/topic-297489.html мы немного флеймили на около-эту тему.

Автор: tonhead 12.5.2010, 16:18
Задачка упростилась, теперь читаем бинарный файл, тип double = 8 байт. Т.о. ничего удалять не надо, новые данные встанут на место старых хорошо. Научиться только с указателями работать.

Спасибо за ответы.

И спасибо рекламе от Гугл  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)