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

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

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

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

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

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

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

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

С++ бинарные файлы - C++
Вот мой чудо-код, но он походу только *.txt файлы открывает, а мне нужно что бы и бинарные тоже. Прошу помощи!!! #include "stdafx.h" ...

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

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

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

7
лендер
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;
.....
// вывод
  }
0
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?
0
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
13.02.2010, 01:06 #4
Видимо, вместо "0" должно быть "f"
И еще - для определения конца файла лучше проверять fread(...) < 1
0
лендер
46 / 46 / 2
Регистрация: 12.01.2010
Сообщений: 183
13.02.2010, 01:52 #5
а точно наоко писал... но смысл ясен
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,850
13.02.2010, 02:15 #6
B_izo_n, была похожая заморочка со структурами и двоичными файлами. Посмотрите, может пригодится что...
0
ISergey
Maniac
Эксперт С++
1391 / 902 / 55
Регистрация: 02.01.2009
Сообщений: 2,695
Записей в блоге: 1
13.02.2010, 02:16 #7
B_izo_n, Может вы покажите как производится запись и чтение.. (и саму структуру тоже)
0
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;
Но ... вопрос остается открытым.
интересно знать, на что же нужно проверять последний символ.
0
13.02.2010, 12:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2010, 12:33
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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