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
codice:
#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);
}
Grazieeeeeeeee