|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.11.2010, 20:04 | #1 |
Регистрация: 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; } |
09.11.2010, 21:17 | #2 |
Форумчанин
Регистрация: 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 - файл с путем к нему) Я думаю с прочитаной строкой можно чтото или как то преобразовать
всему свое время как зиме и весне
и каждому солнцу свой неба кусок |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запись структуры в файл. | 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 |