Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
B_izo_n
0 / 0 / 0
Регистрация: 10.12.2008
Сообщений: 20
#1

Бинарные файлы - C++

12.02.2010, 23:22. Просмотров 1454. Ответов 7
Метки нет (Все метки)

Всем добрый день/вечер/ночь!
У меня такой вопрос.
Создал структуру и записал в файл. При записи в пошаговом режиме - все нормально. Размер файла соответсвует размеру структуры(записываю три штуки) но при чтении из файла функция fread считывает лишнюю пустую структуру. Года три назад я писал такую же прогу и было тоже самое, но я решил эту проблему но сейчас не помню как. Если кто-то знает подскажите как. Уменя времени в обрез. Ооочень надо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2010, 23:22     Бинарные файлы
Посмотрите здесь:

Бинарные файлы c++ - C++
Здравствуйте. Нужно в бинарный файл записать строку (нового стиля), единственное что известно, так это то, что в строке не более 16...

Бинарные файлы в С++ - C++
У меня есть програмка которая находит наименьший общий делитель числа#include<iostream> using namespace std; int main() { int n; ...

Бинарные файлы - C++
Есть 2 текстовых файла .В первом информации представлена в след виде:номер и ФИО,во втором номер Группы,и оценки по предметам.Так мне нужно...

Бинарные файлы - C++
как в бинарном файле заменить 4, 8 и 10 байт

Бинарные файлы - C++
Прошу помочь с новыми задачками

Бинарные файлы - C++
Ребята, нужна Ваша помощь. Как реализовать вот эту штуку ? Буду признателен за любые идеи В первом файле хранится k матриц из n строк...

Бинарные файлы - C++
Помогите пожалуйста написать программы. Исходный файл формировать программно. Количество элементов исходного файла неизвестно. В...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
лендер
46 / 46 / 2
Регистрация: 12.01.2010
Сообщений: 183
13.02.2010, 00:20     Бинарные файлы #2
может быть типичная ошибка, которая исправляется проверкой не прочитан ли конец фйла зразуже после чтения из файла
если да то такой вариант должен роботать
for(i=0;!feof(f);i++)
C
1
2
3
4
5
6
7
  {
fread(*namestruct,sizeof(struct)*i,1,0)  //после считивания смещается указатель/курсор в файле
    if(feof(f))         //преверка непрочитан ли символ конца файла    
      break;
.....
// вывод
  }
B_izo_n
0 / 0 / 0
Регистрация: 10.12.2008
Сообщений: 20
13.02.2010, 00:29  [ТС]     Бинарные файлы #3
Цитата Сообщение от лендер Посмотреть сообщение
может быть типичная ошибка, которая исправляется проверкой не прочитан ли конец фйла зразуже после чтения из файла
если да то такой вариант должен роботать
for(i=0;!feof(f);i++)
C
1
2
3
4
5
6
7
  {
fread(*namestruct,sizeof(struct)*i,1,0)  //после считивания смещается указатель/курсор в файле
    if(feof(f))         //преверка непрочитан ли символ конца файла    
      break;
.....
// вывод
  }
Да конечно я пробовал if(feof(f))break;, но результат тот-же. Еще вопрос : fread(*namestruct,sizeof(struct)*i,1,0) а что это за параметр 0 в функции fread?
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
13.02.2010, 01:06     Бинарные файлы #4
Видимо, вместо "0" должно быть "f"
И еще - для определения конца файла лучше проверять fread(...) < 1
лендер
46 / 46 / 2
Регистрация: 12.01.2010
Сообщений: 183
13.02.2010, 01:52     Бинарные файлы #5
а точно наоко писал... но смысл ясен
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,507
13.02.2010, 02:15     Бинарные файлы #6
B_izo_n, была похожая заморочка со структурами и двоичными файлами. Посмотрите, может пригодится что...
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
13.02.2010, 02:16     Бинарные файлы #7
B_izo_n, Может вы покажите как производится запись и чтение.. (и саму структуру тоже)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2010, 12:33     Бинарные файлы
Еще ссылки по теме:

Бинарные файлы.. - C++
Доброго времени суток, господа! Возникла проблемка с открытием бинарного файла: char stroka; fstream bin_file; ...

бинарные файлы - C++
доброго времени суток. очень нужна помощь по нескоьким задачам. именно помощь, а не решение за меня) спасибо, если кто откликнется. ...

Бинарные файлы - C++
Ребята у вас есть какие та примеры программок работы с бинарными файлами, к примеры поменять местами максимальные и минимальные значения...

Бинарные файлы - C++
Заполнить бинарный файл случайными числами. Найтим min значение (их может быть несколько) и заменить min значение нулями

Бинарные файлы - C++
Всё началось с необходимости наличия программы, в которую вводишь число и она говорит есть ли такое в файле(мне кажется удобнее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
B_izo_n
0 / 0 / 0
Регистрация: 10.12.2008
Сообщений: 20
13.02.2010, 12:33  [ТС]     Бинарные файлы #8
Цитата Сообщение от ISergey Посмотреть сообщение
B_izo_n, Может вы покажите как производится запись и чтение.. (и саму структуру тоже)
Вот моя структура и функции записи и чтения (извиняюсь за большой код):
Код
struct Tel_Book
{
Tel_Book *pPrev,*pNext;
int num;
char first_name[27];
int in_year;
char tel_number[20];
friend ostream& operator <<(ostream& os, const Tel_Book &tbook);
};
вот запись:
Код
pCur=pHead;
if(addnew)
{//1
cout<<endl<<"Save to File? y/n";
set=getch();
if(set==121||set==89||set==-83||set==-115)//if Yes
 {//2
if(exists)
basa=fopen("../Basa.tel","a+b");
if(!exists)
basa=fopen("../Basa.tel","w+b");
if(basa==NULL)
  {//3
cout<<endl<<"Can't open file";
break;//выхожу из case
  }//3
 while(pCur)
   {//4
fwrite(pCur,sizeof(Tel_Book),1,basa);
pCur=pCur->pNext;
   }//4
А вот чтение:
Код
bool a;
FILE *F;
if((F=fopen("../Basa.tel","rb"))==NULL)
a=false;
else
{
t_book=new Tel_Book;
fread(t_book,sizeof(Tel_Book),1,F);
pHead=pCur=t_book;
pHead->pNext=pHead->pPrev=NULL;
while(!feof(F))
  {
t_book=new Tel_Book;
fread(t_book,sizeof(Tel_Book),1,F);
t_book->pNext=NULL;
t_book->pPrev=pCur;
pCur->pNext=t_book;
pCur=t_book;
t_book=NULL;
  }
}
fclose(F);
пробовал в цикле вставлять переьенную char и проверял на '\0'
ну например:
char f;
while(!feof(F))
{
fread(f,sizeof(char),1,F);
if(f=='\0')
break;
fseek(F,-sizeof(char),1);
.............читаем далее
}
вышел из ситуации удалением последнего считанного объекта:
pCur=t_book->pPrev;
pCur->pNext=NULL;
delete t_book;
t_book=NULL;
Но ... вопрос остается открытым.
интересно знать, на что же нужно проверять последний символ.
Yandex
Объявления
13.02.2010, 12:33     Бинарные файлы
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru