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

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

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

Ну собственно,у меня есть некий двоичный файл,в него записана моя информация в двоичном виде,требуется считать эту информацию и вывести на экран.Перепробовал уже кучу способов,выдает "левые" символы,значки всякие.Подскажите пожалуйста как это сделать правильно?И умоляю,не надо перекидывать меня на другие темы,где читают числа из двоичного файла,я их пересмотрел и делал похожим методом,но все равно не помогло.
http://www.cyberforum.ru/cpp-beginners/thread1661956.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2011, 12:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чтение из бинарного файла (C++):

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

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

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

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

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

12
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 12:34 #2
Как записывали, так и считывать, что тут трудного то.
0
whitefox
0 / 0 / 2
Регистрация: 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 / 2
Регистрация: 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 / 2
Регистрация: 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 / 2
Регистрация: 07.10.2011
Сообщений: 19
07.10.2011, 12:58  [ТС] #9
Вот с функцией fread я не до конца разобрался,ибо она требует размер,ну или длину,которую надо считать.Я пытался ее найти через fseek,но и там тоже засада полная.Вылезла куча ошибок и я решил попытаться по другому.Кроме как fread,по-другому не считать?Если да,то помогите написать код считывания.Подскажите как правильно использовать,а то я уже 2 день голову ломаю.
0
Байт
Эксперт C
17759 / 11784 / 2448
Регистрация: 24.12.2010
Сообщений: 23,694
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 / 2
Регистрация: 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
17759 / 11784 / 2448
Регистрация: 24.12.2010
Сообщений: 23,694
07.10.2011, 14:28 #12
whitefox, Ты писал длиной len Вот такой же длиной и читай
Да еще поставь нулик в конце
C
1
str[len] = '\0';
Добавлено через 2 минуты
Ты записал строку без конечного нуля. Так же она и прочтется.
И помни, что в Си массивы (и символы строк) нумеруются с нуля.
2
whitefox
0 / 0 / 2
Регистрация: 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