Поменять местами последнюю и первую строку файла - C (СИ)
Формулировка задачи:
Задача - поменять местами последнюю и первую строку, вот начало кода:
Здесь все работает, потом я хочу перейти в конец файла, прочитать последнюю структуру и записать ее в первую строку, но почему то команда
не перемещает в конец файла курсор и последующая команда показывает, что в буфер попала опять первая строка:
Подскажите, почему не перемещается курсор?
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct book {int n; char autor [30]; char name [50];char date [25];} B;
void swap (FILE*); //поменять 1 и последнюю строки местами
void main()
...
void swap (FILE *tf)
{
struct book1 {int n; char autor [30]; char name [50];char date [25];} B1;
long int i;
tf=fopen ("file1.dat","rb+");//открытие бинарного файла для чтения и записи
clrscr();
i=sizeof(B);
fread(&B,sizeof(B),1,tf);//чтение из файла первой стуктуры В
B1.n=B.n;
strcpy(B1.autor,B.autor);
strcpy(B1.name,B.name);
strcpy(B1.date,B.date); // копирование структуры В в структуру В1fseek(tf,i,2); //переход в конец файла
fread(&B,sizeof(B),1,tf);//чтение из файла последней стуктуры В
fseek(tf,-i,0); //переход в начало файла
fwrite (&B,sizeof(B), 1, tf);//запись в первую строку файла последней структуры В
fseek(tf,--i,2); //переход в конец файла
fwrite (&B1,sizeof(B1), 1, tf);//запись вместо последней строки первой
fclose(tf);
printf("\n В файле поменялись местами первая и последняя строки: \n");
scan (tf);
}Решение задачи: «Поменять местами последнюю и первую строку файла»
textual
Листинг программы
#include <stdio.h>
typedef struct BOOK {
char *name;
} book;
int main(){
FILE *fp;
char *fname = "sometxt";
book nbook;
nbook.name = "Some sucker";
if (NULL!=(fp=fopen(fname, "rb+"))){
fseek(fp, 0, SEEK_END);
fwrite(&nbook, sizeof(book), 1, fp);
fclose(fp);
}
else {
printf("error open file %s\n", fname);
}
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами
- Объявление структуры
bookс полямиnameтипаchar* - Инициализация указателя
fnameдля имени файла - Инициализация структуры
nbookс именем книги - Открытие файла
fpдля чтения и записи в режиме добавленияrb+ - Переход в конец файла с помощью функции
fseek - Запись структуры
nbookв файл с помощью функцииfwrite - Закрытие файла с помощью функции
fclose - Обработка ошибки открытия файла с помощью условного оператора
ifи вывода сообщения об ошибке - Возврат значения 0 для успешного выполнения программы