Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
whitefox
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 19
1

Чтение из бинарного файла

07.10.2011, 12:33. Просмотров 1387. Ответов 12
Метки нет (Все метки)

Ну собственно,у меня есть некий двоичный файл,в него записана моя информация в двоичном виде,требуется считать эту информацию и вывести на экран.Перепробовал уже кучу способов,выдает "левые" символы,значки всякие.Подскажите пожалуйста как это сделать правильно?И умоляю,не надо перекидывать меня на другие темы,где читают числа из двоичного файла,я их пересмотрел и делал похожим методом,но все равно не помогло.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2011, 12:33
Ответы с готовыми решениями:

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется
Формат файла состоит из 3 структур и одной переменной. Подробное описание...

Чтение бинарного файла
Привет! Необходима помощь в таком вопросе - Создал программу для хранения...

Чтение из бинарного файла
Уважаемые форумчане! Прошу помочь мне с чтением из бинарного файла. Проблема...

Чтение бинарного файла
как получить доступ к произвольному адресу файла? Нужно отправить файл через...

Чтение из бинарного файла
Добрый вечер.Возникла проблема при чтении имени объекта из бинарного...

12
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 12:34 2
Как записывали, так и считывать, что тут трудного то.
0
whitefox
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 19
07.10.2011, 12:36  [ТС] 3
Я ведь написал,при считывании выдает набор других символов,которые мне не нужны.Вообщем,у меня почему то читается мусор,вместо нужного мне текста.Кстати да,имя файла нам дано,пусть это будет некая переменная FileName.
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 12:37 4
Код покажите, все станет на свои места
0
whitefox
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 19
07.10.2011, 12:40  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
int ReadBinaryFile(char *FileName)
{
char str[128];
ifstream fd(FileName,ios::in||ios::out||ios::binary);
while(!fd.eof())
{
 fd>>str;
 cout<<str<<endl;
}
fd.close();
return(1);
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 12:42 6
А ничего что внутреннее представление чисел отличается от их изображений? А записывали как файл?
0
whitefox
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 19
07.10.2011, 12:44  [ТС] 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
char *WriteText(char FileName[50],char FileNameArg[50])
{
FILE *fp;fp=fopen(FileNameArg,"r");
char str[256];int len;char *NewFileName=strcat(FileName,".bin");
FILE *fd;fd=fopen(NewFileName,"wb");
if((!fp))
  {
    printf("Error!\n");
    exit(1);
  }
  else
  {
while((fgets(str,256,fp))!=NULL)
  {
  len=strlen(str);
  fwrite(&len,1,1,fd);
  fwrite(str,len,1,fd);
  }
  }
  fclose(fp);
  fclose(fd);
  return NewFileName;
}
Вот функция записи,правда там мне пришлось записывать с помощью fwrite,ибо препод настоял на этом,а про чтение сказал,делай,что хочешь))По условию задачи я там выделяю из файла data.txt "data" и образую имя нового двоичного файла data.bin.
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 12:51 8
А теперь точно также считывайте с помощью fread отдельно строки и числа и все получится
C
1
2
fread(&len,1,1,fd);
fread(str,len,1,fd);
1
whitefox
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 19
07.10.2011, 12:58  [ТС] 9
Вот с функцией fread я не до конца разобрался,ибо она требует размер,ну или длину,которую надо считать.Я пытался ее найти через fseek,но и там тоже засада полная.Вылезла куча ошибок и я решил попытаться по другому.Кроме как fread,по-другому не считать?Если да,то помогите написать код считывания.Подскажите как правильно использовать,а то я уже 2 день голову ломаю.
0
Байт
Эксперт C
18318 / 12029 / 2506
Регистрация: 24.12.2010
Сообщений: 24,293
07.10.2011, 13:04 10
Цитата Сообщение от whitefox Посмотреть сообщение
Вот с функцией fread я не до конца разобрался,ибо она требует размер,ну или длину,которую надо считать.Я пытался ее найти через fseek,но и там тоже засада полная.Вылезла куча ошибок и я решил попытаться по другому.Кроме как fread,по-другому не считать?Если да,то помогите написать код считывания.Подскажите как правильно использовать,а то я уже 2 день голову ломаю.
Ты же перед строкой записал ее длину. Считывай длину, а по ней и строку.
C
1
2
fread(&len, sizeof(int), 1, fd);
fread(str, len, 1, fd);
Удачи!
0
whitefox
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 19
07.10.2011, 13:12  [ТС] 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int ReadBinaryFile(char *FileName)
{
char str[128];int len;
FILE *fd=fopen(FileName,"rb");
if(!fd)
{
cout << "Error open file!" << endl;
return 1;
}
fread(&len,1,1,fd);
fread(str,len+1,1,fd);
printf("%s",str);
fclose(fd);
return(1);
}
Ну он теперь стал выдавать слова,но вместе с ними все равно есть мусор.После слов набор левых символов.Откуда они берутся,подскажите пожалуйста.
0
Байт
Эксперт C
18318 / 12029 / 2506
Регистрация: 24.12.2010
Сообщений: 24,293
07.10.2011, 14:28 12
whitefox, Ты писал длиной len Вот такой же длиной и читай
Да еще поставь нулик в конце
C
1
str[len] = '\0';
Добавлено через 2 минуты
Ты записал строку без конечного нуля. Так же она и прочтется.
И помни, что в Си массивы (и символы строк) нумеруются с нуля.
2
whitefox
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 19
07.10.2011, 15:20  [ТС] 13
При добавлении строки
C++
1
str[len]='\0'
вылезает ошибка
Access violation at address 004014F9.Write of address 0025FDBD.Что это значит?Эту строку нужно добавлять при записи строки в файл или уже при чтении?Прошу простить меня за мою тупость,но очень хочу понять и разобраться.

Добавлено через 14 минут
Теперь выдает 2 слова нормально,а 2 слова с лишними символами...
0
07.10.2011, 15:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2011, 15:20

Чтение бинарного файла
Помогите, пожалуйста, научите, как правильно читать файлы! Есть бинарный файл....

Чтение бинарного файла
Добрый Добавлено через 6 минут Добрый день. Не получается прочитать бин....

Чтение бинарного файла
Здравствуйте. Есть код чтения бинарного файла: FILE *f; string tmp; char...


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

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

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