Файл не удаляется после того, как отработала другая функция - C (СИ)
Формулировка задачи:
Подскажите пожалуйста в чем проблема или как обойти это.....
все нормально удаляет
пока не воспользуюсь этой функцией
remove( "file1.dat" );
void print( FILE * tf ) { int i; clrscr(); tf = fopen( "file1.dat", "rb" ); i = 1; fread( &t1, sizeof( t1 ), 1, tf ); while( !feof( tf ) ) { printf( "\n %3d familya %s imya %s otchestvo %s", i, t1.F, t1.I, t1.O); printf( "\n Ocenki "); printf("\n %s %s", t1.subject[0].sub, t1.subject[0].bal); printf("\n %s %s", t1.subject[1].sub, t1.subject[1].bal); printf("\n %s %s", t1.subject[2].sub, t1.subject[2].bal); printf("\n %s %s", t1.subject[3].sub, t1.subject[3].bal); fread( &t1, sizeof( t1 ), 1, tf ); i++; } close(tf); getch(); }
Решение задачи: «Файл не удаляется после того, как отработала другая функция»
textual
Листинг программы
#include <stdio.h> #include <string.h> /********************************** * У меня нет clrscr. Своя замена * **********************************/ void clrscr( ) { int i; for( i = 0; i < 25; i++ ) putchar( '\n' ); } struct sport { char F[10]; char I[10]; char O[10]; struct subj { char sub[20]; char bal[5]; }subject[4]; } t1; void input( FILE * ); void print( FILE * ); void app( FILE * ); void max_height( ); void del(); int main( int argc, char * argv[] ) { char c; int i; FILE * tf; i = 1; while( i != 0 ) { clrscr(); puts( " 1 - new file\n" " 2 - look file\n" " 3 - dobavlenie v file\n" " 4 - find studenta po familie\n" " 5 - udalit dvoiwnikov\n" " 0 - vihod" ); c = getch(); switch( c ) { case '1': input( tf ); break; case '2': print( tf ); break; case '3': app( tf ); break; case '4': max_height(tf ); break; case '5': del(tf ); break; case '0': return 0; default : puts( "neverni rezgim" ); } } } void input( FILE * tf ) { char ch; tf = fopen( "file1.dat", "wb" ); // открытие бинарного файла для записи clrscr(); printf( "\n Vvod dannih \n" ); do { printf( "\n familiya: " ); scanf( "%s", t1.F ); printf( " Imya: " ); scanf( "%s", &t1.I ); printf( " otchestvo: " ); scanf( "%s", &t1.O ); printf( "Predmet 1 " ); scanf( "%s", &t1.subject[0].sub); printf("Ocenka " ); scanf("%s", &t1.subject[0].bal ); printf( "Predmet 2 " ); scanf( "%s", &t1.subject[1].sub); printf( "Ocenka " ); scanf( "%s", &t1.subject[1].bal ); printf( "Predmet 3 " ); scanf( "%s", &t1.subject[2].sub); printf( "Ocenka " ); scanf( "%s", &t1.subject[2].bal ); printf( "Predmet 4 " ); scanf( "%s", &t1.subject[3].sub); printf( "Ocenka " ); scanf( "%s", &t1.subject[3].bal ); fwrite( &t1, sizeof( t1 ), 1, tf ); // запись в файл одной структуры t1 printf( "\n Zakonchit? y/n " ); ch = getch(); } while( ch != 'y' ); fclose( tf ); } void print( FILE * tf ) { int i; clrscr(); tf = fopen( "file1.dat", "rb" ); i = 1; fread( &t1, sizeof( t1 ), 1, tf ); while( !feof( tf ) ) { printf( "\n %3d familya %s imya %s otchestvo %s", i, t1.F, t1.I, t1.O); printf( "\n Ocenki "); printf("\n %s %s", t1.subject[0].sub, t1.subject[0].bal); printf("\n %s %s", t1.subject[1].sub, t1.subject[1].bal); printf("\n %s %s", t1.subject[2].sub, t1.subject[2].bal); printf("\n %s %s", t1.subject[3].sub, t1.subject[3].bal); fread( &t1, sizeof( t1 ), 1, tf ); i++; } close(tf); getch(); } void app( FILE * tf ) { char ch; tf = fopen( "file1.dat", "ab" ); // открытие бинарного файла для добавления clrscr(); printf( "\n Vvod dannih \n" ); do { printf( "\n familiya: " ); scanf( "%s", t1.F ); printf( " Imya: " ); scanf( "%s", &t1.I ); printf( " otchestvo: " ); scanf( "%s", &t1.O ); printf( "Predmet 1 ocenka " ); scanf( "%s,%s", &t1.subject[0].sub, t1.subject[0].bal ); printf( "Predmet 2 ocenka " ); scanf( "%s,%s", &t1.subject[1].sub, t1.subject[0].bal ); printf( "Predmet 3 ocenka " ); scanf( "%s,%s", &t1.subject[2].sub, t1.subject[0].bal ); printf( "Predmet 4 ocenka " ); scanf( "%s,%s", &t1.subject[3].sub, t1.subject[0].bal ); fwrite( &t1, sizeof( t1.subject ), 1, tf ); // запись в файл одной структуры t1 printf( "\n Zakonchit? y/n " ); ch = getch(); } while( ch != 'y' ); fclose( tf ); } void max_height( FILE * fd) { int check = 0; clrscr(); printf( " Vvedite familiu: " ); char name[10]; scanf( "%s", name ); fd = fopen( "file1.dat", "r+"); if( !fd ) return; struct sport temp_buff; fread( &t1, sizeof( t1 ), 1, fd ); char yx[0]; while( !feof( fd )) { if( ! strcmp (t1.F,name)) { printf( "%s %s %s \n", t1.F, t1.I , t1.O ); printf( "\n Ocenki "); printf("\n %s %s", t1.subject[0].sub, t1.subject[0].bal); printf("\n %s %s", t1.subject[1].sub, t1.subject[1].bal); printf("\n %s %s", t1.subject[2].sub, t1.subject[2].bal); printf("\n %s %s", t1.subject[3].sub, t1.subject[3].bal); printf( "\n Izmenit ocenki? y/n " ); scanf("%s",yx); if( ! strcmp (yx,"y")) { check = 1; FILE*tf; tf = fopen( "file1.dat", "rb" ); fread( &t1, sizeof( t1 ), 1, tf ); char ch; FILE*tf2; tf2 = fopen( "file2.dat", "wb" ); while( !feof( tf ) ) { if( ! strcmp (t1.F,name)) { printf( "Predmet 1 " ); scanf( "%s", &t1.subject[0].sub); printf("Ocenka " ); scanf("%s", &t1.subject[0].bal ); printf( "Predmet 2 " ); scanf( "%s", &t1.subject[1].sub); printf( "Ocenka " ); scanf( "%s", &t1.subject[1].bal ); printf( "Predmet 3 " ); scanf( "%s", &t1.subject[2].sub); printf( "Ocenka " ); scanf( "%s", &t1.subject[2].bal ); printf( "Predmet 4 " ); scanf( "%s", &t1.subject[3].sub); printf( "Ocenka " ); scanf( "%s", &t1.subject[3].bal ); fwrite( &t1, sizeof( t1 ), 1, tf2 ); } else { fwrite( &t1, sizeof( t1 ), 1, tf2 ); } fread( &t1, sizeof( t1 ), 1, tf ); } fclose(tf); fclose( tf2 ); } } fread( &t1, sizeof( t1 ), 1, fd ); } fclose( fd ); if (check =1){ remove( "file1.dat" ); rename("file2.dat","file1.dat"); } getch(); } void del(FILE* tf) { // remove( "file1.dat" ); tf = fopen( "file1.dat", "rb" ); fread( &t1, sizeof( t1 ), 1, tf ); char ch; FILE*tf2; tf2 = fopen( "file2.dat", "wb" ); int checker = 0; while( !feof( tf ) ) { checker = 0; char lol[5]; if( ! strcmp (t1.subject[0].bal,"2")) checker = checker +1; if( ! strcmp (t1.subject[1].bal,"2")) checker = checker +1; if( ! strcmp (t1.subject[2].bal,"2")) checker = checker +1; if( ! strcmp (t1.subject[3].bal,"2")) checker = checker +1; if(checker==4) { } else { fwrite( &t1, sizeof( t1 ), 1, tf2 ); } fread( &t1, sizeof( t1 ), 1, tf ); } fclose(tf); fclose( tf2 ); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д