Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790

    problema creazione e lettura file su windows[C]

    rieccomi...utilizzando il programma su windows ci siamo accorti che appena salviamo crasha...abbiamo scoperto che praticamente il file che contiene le query non è stato creato e non ci spieghiamo il perché il codice sembra giusto adesso vi posto le funzioni che creano e leggono dal file:
    codice:
    FILE* create_tmp_file(const char* path){
    	FILE* tmp;
    	tmp=fopen(path,"wb");
    	return tmp;
    }
    ...
    int write_query(const char* query){
    	FILE* f;
    	if(file_exists("tmp.sql")){
    		f=fopen("tmp.sql","ab");
    		
    	}else{
    		f=create_tmp_file("tmp.sql");
    	}
    	
    	fprintf(f,"%s\n",query);
    	fclose(f);
    	return 0;
    }
    ...
    void save_tmp_file(const char* path,sqlite3* sql){
    	FILE* f;
    	long size;
    	char* buf;
    	char* mex=0;
    	sqlite3_open("DBLocale.db", &sql);
    	if (!sql)
    	{
    		printf("Puntatore a sqlite3 nullo!\n");
    		return;
    	}
    
    	f=fopen(path,"rb");
    	if(f==NULL){
    		perror("file non esiste");
    		return;
    	}
    	fseek(f,0,SEEK_END);/*qui da problemi a quanto pare f è NULL*/
    	size=ftell(f);
    	rewind(f);
    	buf=(char*)malloc(sizeof(char)*(size+1));
    	fread(buf,1,size,f);
    	buf[size] = '\0';
    	//printf("%s",buf);
    	
    	if(!sqlite3_exec(sql,buf,0,0,&mex)){
    		printf("%s",mex);
    	}
    	fclose(f);
      	free(buf);
    	sqlite3_free(mex);
    }
    conoscenze: C/C++, Java, PHP, Python
    [No PM tecnici o di qualsiasi genere]

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Non e' chiaro ...

    La funzione write_query non e' mai chiamata nel codice che hai mostrato ...

    Non precisi cosa significa "appena salviamo" ...

    Cerca di comprendere che chi ti legge non ha tutto il tuo programma chiaro come lo hai tu ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790
    Originariamente inviato da oregon
    Non e' chiaro ...

    La funzione write_query non e' mai chiamata nel codice che hai mostrato ...

    Non precisi cosa significa "appena salviamo" ...

    Cerca di comprendere che chi ti legge non ha tutto il tuo programma chiaro come lo hai tu ...
    quelle sono solo funzioni write_query viene chiamato solo quando l'utente aggiunge dei dati..quando poi clicca su salva si esegue save_tmp_file...ma il problema è che su linux funziona e su windows no...appena facciamo salva crasha nel punto fseek(f,0,SEEK_END); proprio perché il file non viene creato
    conoscenze: C/C++, Java, PHP, Python
    [No PM tecnici o di qualsiasi genere]

  4. #4
    nella funzione create_tmp_file crei e poi apri un file tmp in scrittura per poi passarlo, ma poi lo chiudi con fclose(tmp); da qualche parte?
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  5. #5
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790
    Originariamente inviato da metal_prog
    nella funzione create_tmp_file crei e poi apri un file tmp in scrittura per poi passarlo, ma poi lo chiudi con fclose(tmp); da qualche parte?
    codice:
    int write_query(const char* query){
    	FILE* f;
    	if(file_exists("tmp.sql")){
    		f=fopen("tmp.sql","ab");
    		
    	}else{
    		f=create_tmp_file("tmp.sql");
    	}
    	
    	fprintf(f,"%s\n",query);
    	fclose(f);/*^^*/
    	return 0;
    }
    conoscenze: C/C++, Java, PHP, Python
    [No PM tecnici o di qualsiasi genere]

  6. #6
    li chiudi lo stream f, no lo stream tmp, devi chiuderlo con fclose(tmp); penso...
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  7. #7
    Originariamente inviato da metal_prog
    li chiudi lo stream f, no lo stream tmp, devi chiuderlo con fclose(tmp); penso...
    Ma stai scherzando, vero ? :berto:
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da Metflar
    quando poi clicca su salva si esegue save_tmp_file...
    ma il problema è che su linux funziona e su windows no...
    Questo fatto non e' indicativo ... se c'e' un problema con dei puntatori, allora il comportamento e' indefinito e potrebbe funzionare (o non funzionare) alternativamente anche sullo stesso sistema.

    appena facciamo salva crasha nel punto fseek(f,0,SEEK_END); proprio perché il file non viene creato
    Devi mostrare la sequenza di chiamate delle funzioni di cui parli (che presumo avvenga nel main). Insomma, devi mostrare il main.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Originariamente inviato da Samuele_70
    Ma stai scherzando, vero ? :berto:
    avevo letto male il programma... sono un po' stanco
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

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 © 2024 vBulletin Solutions, Inc. All rights reserved.