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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
whitefox
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 19
#1

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

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

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

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

Чтение из бинарного файла - C++
Всем приветы. Подскажите или помогите, пожалста. Есть вот такая штука: #include "stdafx.h" #include <iostream> #include...

Чтение бинарного файла - C++
как получить доступ к произвольному адресу файла? Нужно отправить файл через ком порт но не с 0 а с адреса 1а000 в цикле по 0х100 байт. с 0...

Чтение бинарного файла - C++
Здравствуйте. Есть код чтения бинарного файла: FILE *f; string tmp; char buff = {0}; f = fopen("data.bin", "rb"); if(f ==...

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

Чтение из бинарного файла - C++
Добрый вечер.Возникла проблема при чтении имени объекта из бинарного файла,запись в файл идет по структуре |char|int|double|float|'/0'|...

Чтение структуры из бинарного файла - C++
Не работает, вроде все верно. #include "stdafx.h" #include <conio.h> #include <iostream> using namespace std; int main() ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 12:34     Чтение из бинарного файла #2
Как записывали, так и считывать, что тут трудного то.
whitefox
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 19
07.10.2011, 12:36  [ТС]     Чтение из бинарного файла #3
Я ведь написал,при считывании выдает набор других символов,которые мне не нужны.Вообщем,у меня почему то читается мусор,вместо нужного мне текста.Кстати да,имя файла нам дано,пусть это будет некая переменная FileName.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 12:37     Чтение из бинарного файла #4
Код покажите, все станет на свои места
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);
}
 Комментарий модератора 
Используйте теги форматирования кода!
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 12:42     Чтение из бинарного файла #6
А ничего что внутреннее представление чисел отличается от их изображений? А записывали как файл?
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.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 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);
whitefox
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 19
07.10.2011, 12:58  [ТС]     Чтение из бинарного файла #9
Вот с функцией fread я не до конца разобрался,ибо она требует размер,ну или длину,которую надо считать.Я пытался ее найти через fseek,но и там тоже засада полная.Вылезла куча ошибок и я решил попытаться по другому.Кроме как fread,по-другому не считать?Если да,то помогите написать код считывания.Подскажите как правильно использовать,а то я уже 2 день голову ломаю.
Байт
Эксперт C
15833 / 10160 / 1522
Регистрация: 24.12.2010
Сообщений: 19,148
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);
Удачи!
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);
}
Ну он теперь стал выдавать слова,но вместе с ними все равно есть мусор.После слов набор левых символов.Откуда они берутся,подскажите пожалуйста.
Байт
Эксперт C
15833 / 10160 / 1522
Регистрация: 24.12.2010
Сообщений: 19,148
07.10.2011, 14:28     Чтение из бинарного файла #12
whitefox, Ты писал длиной len Вот такой же длиной и читай
Да еще поставь нулик в конце
C
1
str[len] = '\0';
Добавлено через 2 минуты
Ты записал строку без конечного нуля. Так же она и прочтется.
И помни, что в Си массивы (и символы строк) нумеруются с нуля.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2011, 15:20     Чтение из бинарного файла
Еще ссылки по теме:

Чтение 10-ой структуры из бинарного файла - C++
Здравствуйте как это реализовать, не перебирая все структуры.

Запись/чтение бинарного файла - C++
Здавствуйте, помогите, пожалуйста, с чтением и записью объекта в бинарный файл. Пишут, что невозможно записать в бинарный файл, если в...

Чтение и запись бинарного файла - C++
Добрый день! Есть задача прочитать с бинарного файла информацию, обработать ее и записать результат в бинарный файл. #include &quot;stdafx.h&quot;...

Чтение строк из бинарного файла. - C++
Вот как происходит запись строк pr.login и pr.password: FILE *f; f=fopen(path,&quot;ab&quot;); if (f!=NULL) { cout&lt;&lt;&quot;Файл концигурации...

Чтение данных из бинарного файла - C++
читаю по while (!stream.eof()), проблема в том что в конце в условие лишний раз заходит, и пытается считать данные, хотя уже файл кончился,...


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

Или воспользуйтесь поиском по форуму:
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 слова с лишними символами...
Yandex
Объявления
07.10.2011, 15:20     Чтение из бинарного файла
Ответ Создать тему
Опции темы

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