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

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

Войти
Регистрация
Восстановить пароль
 
LiaHiM
1 / 1 / 0
Регистрация: 03.12.2007
Сообщений: 15
#1

Почему файл пустой? - C++

20.01.2010, 00:19. Просмотров 470. Ответов 4
Метки нет (Все метки)

Вроде бы делаю всё верно...
Объявлен массив структур
C++
1
2
3
4
5
6
7
struct book {
  int index;
  char title[20];
  char autor[20];
  int publdate;
  int number;
  } lib [SIZE];
Заполняю массив
C++
1
2
3
4
5
6
7
8
9
10
    cout << "Порядковый номер книги -> ";
    cin >> lib[i].index;
    cout << "Название книги -> ";
    cin >> lib[i].title;
    cout << "Автор книги -> ";
    cin >> lib[i].autor;
    cout << "Год издания книги -> ";
    cin >> lib[i].publdate;
    cout << "Количество -> ";
    cin >> lib[i].number;
Дальше сохраняю в бинарном режиме
C++
1
2
3
4
5
6
7
8
9
10
11
12
   FILE *out;
   char fname[20];
   printf("Введите имя файла\n");
   scanf("%s", &fname);
   if ((out = fopen (fname, "wb")) == NULL)
   {
     printf("Ошибка открытия файла\n");  
     getch();
     return;   
   }
   fwrite(&lib, sizeof(lib), SIZE, out);
   fclose(out);
Вложения
Тип файла: 7z LB_11_8.7z (1.5 Кб, 10 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2010, 00:19     Почему файл пустой?
Посмотрите здесь:

Почему при инициализации строки, сначала создаётся пустой объект? - C++
Чтобы при создании присвоить строке какое-то значение, можно использовать два способа: string str1(”bla-bla-bla”); или string str2 =...

А пустой ли файл? - C++
Надо проверить файл на пустоту... причем, проверять размер файла не стоит... Потому что там может быть, ну к примеру... на мегабайт...

Пустой файл списки - C++
В общем есть код, помогите пожалуйста убрать ошибку, что возникает при пустом входном файле, как исключить ее, помогите пожалуйста? ...

Нужно определить пустой ли файл - C++
Есть функция, которая записывает информацию, если файл пуст. Файл уже создан, поэтому открывается на запись/перезапись. У меня код такой,...

Как проверить пустой файл или нет? - C++
Всем доброго времени суток, столкнулся с такой проблемой: нужно считать из файла данные и записать их в динамический список, но вот если...

Не копирует файл, почему? - C++
по нажатии на кнопку должно копировать указаный файл в папку с программой в папку 1, но ничего не копирует:( void __fastcall...

Почему не пишет файл? - C++
int main (int Count , char **Parametrs) { std::ofstream s; s.open(&quot;C:\Projects\test\s.log&quot;); s&lt;&lt;&quot;tfds&quot;; ...

Почему не хочет создаваться файл? - C++
Если в тексте программы указать путь и имя файла, то файл создаваться не хочет, char destination=&quot;d:\aaa.txt&quot;; fopen(destination,&quot;w&quot;); ...

Файл: Объясните, почему не работает? - C++
Хочу в созданный пустой файл записать hello. Написал простенькую программу. Объясните, почему не работает? Компиляция проходит...

Почему не считывает весь файл? - C++
Считывает только часть файла (приблизительно 29 строк любого тхт файла). Подскажите пожалуйста в чём может быть ошибка. Вот часть кода,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Radjuk
134 / 68 / 12
Регистрация: 10.10.2009
Сообщений: 187
20.01.2010, 00:40     Почему файл пустой? #2
ну я точн оне знаю но я когда делал курсак то записывал так :
C
1
fpintf(out,"%s ",lib[i].title);
Добавлено через 1 минуту
но ето не в бинарном вроде у меня )
LiaHiM
1 / 1 / 0
Регистрация: 03.12.2007
Сообщений: 15
20.01.2010, 01:08  [ТС]     Почему файл пустой? #3
Да, это в текстовом режиме

Добавлено через 3 минуты
Можно конечно и в текстовом, в цикле, но хотелось одним махом записать массив структур, а потом также считать

Добавлено через 7 минут
C++
1
2
3
   for(k=0; k<SIZE; k++)
     if (lib[k].index) 
       fprintf(out, "%i %s %s %i %i\n", lib[k].index,lib[k].title,lib[k].autor,lib[k].publdate, lib[k].number);
Ну хоть теперь что-то в фале есть)) Как я понял считывать можно аналогично командой fscanf?

Добавлено через 14 минут
C
1
2
3
4
5
   k=0;
   while (!feof((in)))
   {
     fscanf(in, "%i %s %s %i %i\n", &lib[k].index, &lib[k].title, &lib[k].autor, &lib[k].publdate, &lib[k].number);
     k++;
}

Добавлено через 1 минуту
Все записывает и считывает. В общем-то задачу решена...но как же с бинарными? В чем я накосячил?
Alexiski
Любитель давать советы
339 / 131 / 2
Регистрация: 12.01.2009
Сообщений: 511
20.01.2010, 02:48     Почему файл пустой? #4
Похоже, что Вы просто слишком много хотите записать. Ведь lib - это массив из book и поэтому
C++
1
sizeof(lib) == sizeof(book) * SIZE
То есть надо или
C++
1
fwrite(&lib, sizeof(book), SIZE, out);
или
C++
1
fwrite(&lib, sizeof(lib), 1, out);
SerЁga
32 / 32 / 4
Регистрация: 18.08.2009
Сообщений: 93
20.01.2010, 14:08     Почему файл пустой? #5
Можно так записать
C++
1
2
3
4
for(int i=0;i<SIZE;i++)
    {
    fwrite(&lib[i], sizeof(lib[i]),1, out);
    }
Yandex
Объявления
20.01.2010, 14:08     Почему файл пустой?
Ответ Создать тему
Опции темы

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