Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81

    [C] Copia testo su nuova linea nel file

    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

  2. #2

    Re: [C] Copia testo su nuova linea nel file

    Originariamente inviato da tina8
    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:
    ...
    if ((prova=fopen(filename,"a+"))==NULL)
    ...
    Grazieeeeeeeee
    Succede perchè apri il file in modalità append+ (a+), il che vuol dire che se il file non esiste lo crea e se esiste la stringa che inserisci la "appende" al file (la inserisce alla fine)

    Cosa vorresti fare tu ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81
    Grazie della risposta, provo a spiegartelo con un esempio, ipotizziamo che il file di partenza sia esistente e contenga il seguente testo scritto da me:

    1234abcdefgh

    io voglio copiare i primi 10 caratteri e riscriverli in coda al testo già presente ossia vorrei un risultato del genere:
    1234abcdefgh1234abcde invece ottengo:

    1234abcdefgh
    1234abcde (questa stringa la scrive a capo)

    inoltre dopo il primo inserimento funziona perfettamente ossia continua a scrivere sullo stesso rigo :

    1234abcdefgh
    1234abcde1234abcde

    Ipotizzo che il problema sia solo alla prima scrittura sul file. Spero di essere stata chiara. Grazie

  4. #4
    Non è un problema.
    E' solo che se apri il file in append lui ovviamente inserisce una newline alla fine del file e poi ti scrive la riga.
    Se scrivi un'altra riga senza riaprire il file, non mette la newline e funziona.

    Per fare quello che vuoi fare te, apri il file in scrittura normale ("w+") e vai alla fine del file con

    codice:
    fseek(puntatore_file, 0L, SEEK_END);
    Poi scrivi la stringa.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.