Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2010, 20:04   #1
Bed Alice
 
Регистрация: 09.11.2010
Сообщений: 3
Стрелка Чтение и запись структуры в бинарный файл

Есть некоторый текстовый файл, содержащий построчно
Фамилия студента Имя 10 оценок, например
Иванов Иван 5 3 4 4 3 3 4 5 4 3
...
Необходимо записать из текстового файла в стуктуру, а оттуда уже в бинарный файл, и его прочитать.
Не пойму как записывать или структуру целиком, но потом при чтении фамилия и имя не читаются, либо отдельно фамилию, имя и оценки, но не тогда происходит ошибка при чтении.
Помогите разобраться!
/*Запись в бинарный файл*/
void writeBinaryFile(char* nameFileFrom, char* nameFileTo)
{
FILE* fR = fopen(nameFileFrom, "r");
FILE* fW = fopen(nameFileTo, "wb");
char s[50];
Student stud;
if(fR == NULL)
{
printf("Ошибка открытия файла\n");
return FileOpenError;
}
while(fgets(s, 50, fR) != NULL)
{
stud = strStudent(s);
fwrite((char*)&stud, sizeof(Student), 1, fW);//запись целиком
/*fwrite(stud.surname, strlen(stud.surname) * sizeof(char), 1, fW);
fwrite(stud.name, strlen(stud.name) * sizeof(char), 1, fW);
fwrite(stud.marks, 10 * sizeof(int), 1, fW);*/
}
fclose(fR);
fclose(fW);
}
/*Чтение бинарного файла*/
int main ()
{
char* nameFile1 = "a.txt";
char* nameFile2 = "b.dat";
FILE* fRb = fopen (nameFile2, "rb");
Student stud;
int i;
writeBinaryFile(nameFile1, nameFile2);
while(fread((char*)&stud, sizeof(Student), 1, fRb) != NULL)
{
/*fread(stud.surname, strlen(stud.surname) * sizeof(char), 1, fRb);
fread(stud.name, strlen(stud.name) * sizeof(char), 1, fRb);
fread(stud.marks, 10 * sizeof(int), 1, fRb);*/
/*при чтении вместо имени и фамилии квадратики какие-то*/
printf("%s %s", stud.surname, stud.name);
for(i = 0; i < 10; i++)
printf("%d ", stud.marks[i]);
printf("\n");
}
fclose (fRb);
system("pause");
return 0;
}
Bed Alice вне форума Ответить с цитированием
Старый 09.11.2010, 21:17   #2
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

Простите непрочитал весь предаставленный листинг
проблема с объемом чтения нужно знать сколько читать байт
попробуйте вот что: читать по символу
for int i = 0; i<10;i++)
{
fread (S1+i, sizeof (char),1,F);
if(s1[i]=='\0') break;
}
вцикле за раз читается по символу и при обнаружеии конца строки цикл прекращается(соответственно S1 - строка в которую читаем F - файл с путем к нему)
Я думаю с прочитаной строкой можно чтото или как то преобразовать
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись структуры в файл. ssi Помощь студентам 0 10.04.2010 07:38
Чтение и запись в файл deagle05 Общие вопросы C/C++ 3 22.12.2009 00:11
Считывание и запись структур в бинарный файл TheKnyazz Общие вопросы C/C++ 7 10.11.2009 13:47
запись классов в бинарный файл Feannewedd Общие вопросы C/C++ 6 29.06.2009 10:11
Запись структуры и чтение из файла [MI_nor] Общие вопросы C/C++ 6 08.04.2009 15:52