Ciao a tutti, potete dirmi perchè se il programma seguente scrive su un file vuoto i caratteri sono scritti a partire dalla prima linea altrimenti se è già presente del testo il nuovo testo viene copiato su una nuova linea, ad esempio:
1. file vuoto
123abcd
2. File già scritto
123abcdefghilm
123abcd
Grazieeeeeeeeecodice:#include <unistd.h> #include <stdio.h> #include <dirent.h> #include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char *ptr; FILE *prova; DIR *dp; struct dirent *dirp; struct stat buf; int size, dim,nc; char directory[526]; char *directoryi; char *stringa; char *stringa2; char *filename="top.end"; getcwd(directory, sizeof(directory)); directoryi=(char *)malloc(strlen(directory)+1); strcpy(directoryi,directory); while(strcmp(directory,"/")!=0){ getcwd(directory, sizeof(directory)); printf("%s\n", directory); printf("%s\n", directoryi); if ( (dp = opendir(directory)) == NULL){ printf("can't open %s", argv[1]); exit(-1); } while ( (dirp = readdir(dp)) != NULL){ //printf("File %s\n", dirp->d_name); if(strcmp(dirp->d_name,"top.end")==0){ printf("File trovato %s\n",dirp->d_name); printf("File %s\n", dirp->d_name); printf("\npercorso %s \n",directory); if ((prova=fopen(filename,"a+"))==NULL){ printf("non posso aprire il file"); exit(1); } rewind(prova); stringa=(char *)malloc(11); fgets(stringa,11,prova); if (ferror(prova)) perror("errore apertura file"); printf("primi 10 caratteri di top.end\n %s\n",stringa); if (fseek(prova,0,SEEK_END)!=0){//posiziono lo stream alla fine del file fprintf(stderr,"\n errore fseek"); exit(1); } fputs(stringa,prova);//copio i 10 caratteri in coda if (ferror(prova)) perror("errore apertura file"); dim= stat(filename,&buf); size=buf.st_size printf("dimensione file %lld\n",(long long)buf.st_size); rewind(prova); stringa=realloc(stringa,size+1 printf("File top.end con i primi 10 caratteri copiati in coda:\n"); while (!feof(prova)){ fgets(stringa,size+1,prova); if (ferror(prova)) perror("errore apertura file"); printf(" %s",stringa); } fclose(prova); exit(0); } }chdir(".."); } printf("File Top.end non è stato trovato, lo crea nela directory corrente\n"); chdir(directoryi); printf("\npercorso %s \n",directoryi); if ((prova=fopen(filename,"a+"))==NULL){ printf("non posso aprire il file"); exit(1); } fputs(directoryi,prova); rewind(prova); stringa2=(char *)malloc(strlen(directoryi)+1); while (!feof(prova)){ //ciclo continuo fino alla fine del file dovuta all'uscita di fgets fgets(stringa2,size+1,prova); //incaso incontra carattere di nuovariga() if (ferror(prova)) perror("errore apertura file"); printf(" %s",stringa2); } fclose(prova); }![]()

Rispondi quotando