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

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

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

чтение бинарного файла C++
чтение из бинарного файла C++
Чтение бинарного файла C++
чтение бинарного файла C++
C++ Чтение из бинарного файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 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++
 Аватар для Thinker
4215 / 2189 / 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++
 Аватар для Thinker
4215 / 2189 / 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++
 Аватар для Thinker
4215 / 2189 / 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 день голову ломаю.
Байт
 Аватар для Байт
13993 / 8824 / 1231
Регистрация: 24.12.2010
Сообщений: 15,990
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);
}
Ну он теперь стал выдавать слова,но вместе с ними все равно есть мусор.После слов набор левых символов.Откуда они берутся,подскажите пожалуйста.
Байт
 Аватар для Байт
13993 / 8824 / 1231
Регистрация: 24.12.2010
Сообщений: 15,990
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     Чтение из бинарного файла
Еще ссылки по теме:

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

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

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

Текущее время: 08:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru