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

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

Войти
Регистрация
Восстановить пароль
 
Enflamed
2 / 2 / 0
Регистрация: 12.04.2015
Сообщений: 55
Завершенные тесты: 1
#1

как работает fwrite() и fread() со структурой? - C++

25.12.2015, 21:33. Просмотров 916. Ответов 9
Метки нет (Все метки)

Добрый день, у меня вопрос:
1) Каким образом я могу записать структуру в файл функцией fwrite, а потом ещё и достать из него эту структуру?
2) Как она записывается в файл, в виде чего?
3) Каким образом я могу её обратно зачитать из файла в экземпляр моей структуры?

В этом коде реализован поиск по стране country из файла in и добавление записи в файл out, но когда я их блокнотом открываю, там какие-то каракули, не понятно ничего, но код работает и считывает структуру и туда и сюда, как так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
typedef struct 
{
    char name[15] ;                 //наименование экскурсии
    char country[15] ;              //страна
    int cena ;                          //стоимость путевки
    int time ;                          //продолжительность
    char trans[10] ;                //транспорт
}trip ;
 
void poisk_country(char *fname1, char *fname2)
{
    unsigned char country[15] ;
    trip excur ;
    FILE *in,            //исходный файл
    *out ;          //файл результатов поиска
 
    in = fopen("G:\\bd1.dat", "r") ;        //открываем файл на чтение
    out = fopen("G:\\bd2.dat", "w") ;       //открываем файл на запись
    std::cout << "\n Название страны для поиска? " ;
    cin >> country ;
    rewind(in) ;
    while(fread(&excur, sizeof(excur), 1, in) > 0)
        if(strncmp(excur.country, (const char *)country, 15) == 0)
        {
            fwrite(&excur, sizeof(excur), 1, out) ;
        }
    fclose(out) ;
    fclose(in) ;
    getchar(); 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2015, 21:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос как работает fwrite() и fread() со структурой? (C++):

Как работают функции fwrite и fread - C++
объясните мне пожалуйста функции fwrite и fread.Буду очень благодарен!:scratch:

Функции fread() и fwrite() - C++
Меня интересует что это за &quot;счётчик&quot; в этих функциях fwrite( massiv, *size_int * sizeof(unsigned int), 1, fp); &lt;= в большинстве примеров...

Аналог С функции fread и fwrite в С++ - C++
Здравствуйте, какие есть аналоги функций fread() fwrite в С++?

fwrite\fread: чтение и запись в бинарные файлы - C++
Добрый день. Пытаюсь разобратся с чтением и записью в бинарные файлы.. в общем обрисую в краце проблему, записываю класс. class tPoint ...

Fread(), fseek(), fwrite() - Переписка байтов - C++
Всем привет. Такой вопрос. Есть задача пройтись по бинарному файлу с вещественными числами и как-то изменить его элементы, пусть будет,...

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

9
Velesthau
523 / 425 / 129
Регистрация: 25.11.2014
Сообщений: 1,662
25.12.2015, 21:41 #2
Цитата Сообщение от Enflamed Посмотреть сообщение
1) Каким образом я могу записать структуру в файл функцией fwrite, а потом ещё и достать из него эту структуру?
2) Как она записывается в файл, в виде чего?
3) Каким образом я могу её обратно зачитать из файла в экземпляр моей структуры?
Чтобы ответить самому себе на этим вопросы, поработай сначала не со структурой, а с одним числом. Записывай его файл и считывай. Посмотри, как оно выглядит в нем в шестнадцатеричном редакторе. Или в дебаггере посмотри, как оно в памяти лежит. Научись записывать и считывать число. Потом сделай структуру из двух чисел, проделйа те же операции. Тогда сам во всем разберешься куда лучше. И полезнее будет.
Цитата Сообщение от Enflamed Посмотреть сообщение
В этом коде реализован поиск по стране country из файла in и добавление записи в файл out, но когда я их блокнотом открываю, там какие-то каракули, не понятно ничего, но код работает и считывает структуру и туда и сюда, как так?
Тот же совет. Начни без структуры с int'ом.
1
olya7
477 / 294 / 91
Регистрация: 18.02.2013
Сообщений: 684
25.12.2015, 21:47 #3
fwrite()
ну и так далее
0
Enflamed
2 / 2 / 0
Регистрация: 12.04.2015
Сообщений: 55
Завершенные тесты: 1
25.12.2015, 22:03  [ТС] #4
Цитата Сообщение от Velesthau Посмотреть сообщение
Посмотри, как оно выглядит в нем в шестнадцатеричном редакторе.
Спасибо, пробую в данный момент (установил читалку 16-ричных файлов), не отходите, пожалуйста, далеко, сейчас спрошу какой-нибудь вопрос по поводу 16-теричных значений в файле, мне завтра лабу сдавать по этой штуке )
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
25.12.2015, 22:13 #5
Цитата Сообщение от Enflamed Посмотреть сообщение
fwrite
Так это ж сишная! Вы уж определитесь, вы Си или плюсы изучаете? Бинарные файлы используйте.
0
Enflamed
2 / 2 / 0
Регистрация: 12.04.2015
Сообщений: 55
Завершенные тесты: 1
25.12.2015, 22:27  [ТС] #6
Цитата Сообщение от Mr.X Посмотреть сообщение
Вы уж определитесь, вы Си или плюсы изучаете?
Дело в том, что я изучаю C++, но в примере препода к лабораторной используется именно эта функция, думаю, надо научится с ней работать.

Пробую записывать в файл и смотреть в шестнадцатеричном виде, что я записал сейчас...
0
Миниатюры
как работает fwrite() и fread() со структурой?  
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
25.12.2015, 23:17 #7
Цитата Сообщение от Enflamed Посмотреть сообщение
Дело в том, что я изучаю C++
Не очень понятно как можно изучать С++, изучая Си, но с сишными функциями вам надо в сишный раздел обращаться, там сишники для этого и сидят.
0
Renji
1968 / 1366 / 308
Регистрация: 05.06.2014
Сообщений: 3,898
26.12.2015, 00:03 #8
Цитата Сообщение от Enflamed Посмотреть сообщение
В этом коде реализован поиск по стране country из файла in и добавление записи в файл out, но когда я их блокнотом открываю, там какие-то каракули, не понятно ничего, но код работает и считывает структуру и туда и сюда, как так?
А кто вам сказал что Блокнот читает любой наколеночный формат файлов? В двух словах - в текстовом файле одному символу, соответствует один байт. То есть, в некоторых кодировках не один, но да замнем для ясности. Цифры это тоже символы. То есть, на девятизначное число, нужно девять байт (символов). А в вашей структуре тоже самое число запихано в четыре байта. Блокнот такое читать не умеет.
0
Enflamed
2 / 2 / 0
Регистрация: 12.04.2015
Сообщений: 55
Завершенные тесты: 1
26.12.2015, 00:44  [ТС] #9
Цитата Сообщение от Renji Посмотреть сообщение
Блокнот такое читать не умеет.
Да, я просмотрел как это выглядит и понял в итоге, что в файл записывается количество байт, которое блокнот не может отобразить корректно из-за того, что в структуре присутствуют int'ы, всякий мусор, но при этом понял, что структура занимает в памяти фиксированный размер, который как раз указывается при вызове fwrite(), если знать размер структуры (например, с помощью sizeof(struct)), можно считать из файла ровно это количество байт и засунуть ровно в такую же структуру, спасибо за ответы
0
Velesthau
26.12.2015, 01:06     как работает fwrite() и fread() со структурой?
  #10

Не по теме:

Цитата Сообщение от Enflamed Посмотреть сообщение
Да, я просмотрел как это выглядит и понял в итоге, что в файл записывается количество байт, которое блокнот не может отобразить корректно из-за того, что в структуре присутствуют int'ы, всякий мусор, но при этом понял, что структура занимает в памяти фиксированный размер, который как раз указывается при вызове fwrite(), если знать размер структуры (например, с помощью sizeof(struct)), можно считать из файла ровно это количество байт и засунуть ровно в такую же структуру, спасибо за ответы
Во! Так надо подходить к вопросу. Респект тебе

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2015, 01:06
Привет! Вот еще темы с ответами:

Функция fread плохо работает с типом string - C++
Всем доброго времени суток. У меня возникла проблема с чтением из файла. Я храню информацию в виде структуры. struct PC { string...

new не работает со структурой у которой перегружены скобки - C++
struct Coordinate { int x,y; Coordinate(int a1, int b1) : x(a1),y(b1) { } void operator()(int a,int b) { x=a; y=b; ...

Как корректно работать с функцией fread? - C++
Мне необходимо считать информацию из одной директории, а потом поместить эту же информацию в другую директорию(скопировать). Возникла...

fread или как отправить файл по сети - C++
Доброго времени суток. Есть задача: отправить .jpg файл по http. Как я понял мне надо сделать массив char заполнить его содержимым файла и...


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

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

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