Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] Aprire file da cartella

    Quello che sto facendo è un programma che all'inizio deve creare una cartella con un certo nome (deciso dall'utente) e subito dopo crea all'interno alcuni file. Il problema però è uno: riesco a creare la cartella ed il file ma non riesco a leggere il file. Metto qui il codice:

    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>
    #include <dirent.h>
    #include <string.h>

    /* SISTEMA = 1 -> Sistema Linux;
    SISTEMA = 0 -> Sistema Windows; */
    #ifndef SISTEMA
    #define SISTEMA 0
    #endif

    /* Scelgo la funzione di sistema per pulire lo schermo*/
    #if SISTEMA==0
      
    charpulisci "cls";
    #elif SISTEMA==1
      
    charpulisci "clear";
    #endif

    struct pg {
           
    char nome[15];
           
    char cog[15];
           };
           
           
    void ad_p (); /*funzione per aggiungere dettagli*/
    void vd_p (); /*funzione per vedere la scheda*/

           
      

    int main () {
        
    int Error;              /*contiene il return della mkdir()*/
        
    DIRtrova_cartella;   /*serve a verificare se esiste la cartella dove verranno salvati i file*/
        
    char Vuoto[2]; 
        
    printf("Digita il nome del pg (es: ezio, marco...): ");
        
    char nome[15];
        
    int q 15;
        
    scanf("%s"nome);
            
    trova_cartella=opendir (nome);
                if (
    trova_cartella==NULL)
        {
           
    printf ("\nNon è stata trovata la directory %s dove andranno salvati i file del programma."nome);
           
    printf ("\nVerrà creata la directory necessaria al programma. Premi Enter");
           
    fgets (Vuoto,2,stdin);
           
    Error=mkdir (nome);
           if (
    Error==-1)
           {
                         
    printf ("\nErrore nella creazione della cartella.\n");
                         
    printf ("\nPremere il tasto 'Esc' per uscire dal programma.\n\n");
                         
    getch();
                         return;
           }
           
    printf ("\nLa directory %s è stata creata correttamente.\n\n"nome);
        }
        
        
    closedir (trova_cartella);
               
    printf("Premi un tasto per continuare");
           
    getch();
           
    system(pulisci);
           
    ad_p (nomeq);
        
    int n=0;
        while(
    n!=3) {
        
    system(pulisci);
        
    printf("Digita 1 per vedere; 2 per modificare; 3 per uscire: ");
        
    scanf("%d", &n);
        if(
    n==1ad_p(nomeq);
        else if(
    n==2vd_p(nomeq);
        else 
    printf("Numero non corretto");
             }
             }
             
             

             
    /********************+FUNZIONE PER CREARE I DATI *****************/         
    void ad_p(char p [], int q) {
         
    FILE *f;
         
    char *dat = {"\\\inf.bft"};
         
    strcat(p,dat);
         if((
    fopen("inf.bft""a"))== NULL) {
               if((
    fopen("inf.bft""w"))== NULL) {
                     
    printf("Il file non può essere creato/aperto\n Premi un tasto per ritornare al menu");
                         
    getch();
                     return;
                     }
                     }
         
    struct pg d;
         
    printf("Digita il nome del pg: ");
         
    scanf("%s"d.nome);
         
    printf("Digita il cognome del pg: ");
              
    scanf("%s"d.cog);
         
    fwrite(&dsizeof(struct pg), 1f);
         
    fclose(f);
         }
         
    /********************+FUNZIONE PER VEDERE I DATI *****************/
    void vd_p(char p [], int q) {
         
    char *dat = {"\\\inf.bft"};
         
    strcat(p,dat);
         
    FILE *f;
         
    struct pg a;
         if((
    fopen("inf.bft""r"))== NULL) {
                             
    printf("Il file non puo essere aperto\n Premi un tasto per ritornare al menu");
                                 
    getch();
                             return;
                     
         }
         
    rewind(f);
                              
    fread(&asizeof(struct pg), 1f);
         while(!
    feof(f)) {
         
    printf("%s "a.nome);
              
    printf("%s\n"a.cog);
                                   
    fread(&asizeof(struct pg), 1f);
                    }
                    
    getch();
         
    fclose(f);
         } 
    Ho provato, utilizzando lo stesso codice, a fare la stessa cosa salvando i file nella stessa cartella del programma (quindi senza creare una nuova cartella) e funziona alla grande il programma. Se metto la parte della cartella non funziona e non capisco il motivo. Qualcuno potrebbe aiutarmi?

  2. #2
    Rispondo un attimo per avvisare che ho sbagliato una parte del codice xD
    Questo è quello effettivo:

    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>
    #include <dirent.h>
    #include <string.h>

    /* SISTEMA = 1 -> Sistema Linux;
    SISTEMA = 0 -> Sistema Windows; */
    #ifndef SISTEMA
    #define SISTEMA 0
    #endif

    /* Scelgo la funzione di sistema per pulire lo schermo*/
    #if SISTEMA==0
      
    charpulisci "cls";
    #elif SISTEMA==1
      
    charpulisci "clear";
    #endif

    struct pg {
           
    char nome[15];
           
    char cog[15];
           };
           
           
    void ad_p (); /*funzione per aggiungere dettagli*/
    void vd_p (); /*funzione per vedere la scheda*/

           
      

    int main () {
        
    int Error;              /*contiene il return della mkdir()*/
        
    DIRtrova_cartella;   /*serve a verificare se esiste la cartella dove verranno salvati i file*/
        
    char Vuoto[2]; 
        
    printf("Digita il nome del pg (es: ezio, marco...): ");
        
    char nome[15];
        
    int q 15;
        
    scanf("%s"nome);
            
    trova_cartella=opendir (nome);
                if (
    trova_cartella==NULL)
        {
           
    printf ("\nNon è stata trovata la directory %s dove andranno salvati i file del programma."nome);
           
    printf ("\nVerrà creata la directory necessaria al programma. Premi Enter");
           
    fgets (Vuoto,2,stdin);
           
    Error=mkdir (nome);
           if (
    Error==-1)
           {
                         
    printf ("\nErrore nella creazione della cartella.\n");
                         
    printf ("\nPremere il tasto 'Esc' per uscire dal programma.\n\n");
                         
    getch();
                         return;
           }
           
    printf ("\nLa directory %s è stata creata correttamente.\n\n"nome);
        }
        
        
    closedir (trova_cartella);
               
    printf("Premi un tasto per continuare");
           
    getch();
           
    system(pulisci);
           
    ad_p (nomeq);
        
    int n=0;
        while(
    n!=3) {
        
    system(pulisci);
        
    printf("Digita 1 per vedere; 2 per modificare; 3 per uscire: ");
        
    scanf("%d", &n);
        if(
    n==1ad_p(nomeq);
        else if(
    n==2vd_p(nomeq);
        else 
    printf("Numero non corretto");
             }
             }
             
             

             
    /********************+FUNZIONE PER CREARE I DATI *****************/         
    void ad_p(char p [], int q) {
         
    FILE *f;
         
    char *dat = {"\inf.bft"};
         
    strcat(p,dat);
         if((
    fopen(p"a"))== NULL) {
               if((
    fopen(p"w"))== NULL) {
                     
    printf("Il file non può essere creato/aperto\n Premi un tasto per ritornare al menu");
                         
    getch();
                     return;
                     }
                     }
         
    struct pg d;
         
    printf("Digita il nome del pg: ");
         
    scanf("%s"d.nome);
         
    printf("Digita il cognome del pg: ");
              
    scanf("%s"d.cog);
         
    fwrite(&dsizeof(struct pg), 1f);
         
    fclose(f);
         }
         
    /********************+FUNZIONE PER VEDERE I DATI *****************/
    void vd_p(char p [], int q) {
         
    char *dat = {"\inf.bft"};
         
    strcat(p,dat);
         
    FILE *f;
         
    struct pg a;
         if((
    fopen(p"r"))== NULL) {
                             
    printf("Il file non puo essere aperto\n Premi un tasto per ritornare al menu");
                                 
    getch();
                             return;
                     
         }
         
    rewind(f);
                              
    fread(&asizeof(struct pg), 1f);
         while(!
    feof(f)) {
         
    printf("%s "a.nome);
              
    printf("%s\n"a.cog);
                                   
    fread(&asizeof(struct pg), 1f);
                    }
                    
    getch();
         
    fclose(f);
         } 

  3. #3
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Ci sono molti errori alcuni solo di distrazione , non li ho corretti dopo ci pensi tu!
    PROVALO piu o meno funziona
    CONSIGLIO invece di fare giochini con l'evidenziatura del codice sta più attento
    a codice che scrivi
    codice:
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <dirent.h> 
    #include <string.h> 
    
    /* SISTEMA = 1 -> Sistema Linux; 
    SISTEMA = 0 -> Sistema Windows; */ 
    #ifndef SISTEMA 
    #define SISTEMA 0 
    #endif 
    
    /* Scelgo la funzione di sistema per pulire lo schermo*/ 
    #if SISTEMA==0 
      char* pulisci = "cls"; 
    #elif SISTEMA==1 
      char* pulisci = "clear"; 
    #endif 
    
    struct pg { 
           char nome[15]; 
           char cog[15]; 
           }; 
            
            
    void ad_p (); /*funzione per aggiungere dettagli*/ 
    void vd_p (); /*funzione per vedere la scheda*/ 
    
            
       
    
    int main () { 
        int Error;              /*contiene il return della mkdir()*/ 
        DIR* trova_cartella;   /*serve a verificare se esiste la cartella dove verranno salvati i file*/ 
        char Vuoto[2];  
        printf("Digita il nome del pg (es: ezio, marco...): "); 
        char nome[15]; 
        int q = 15; 
        scanf("%s", nome); 
            trova_cartella=opendir (nome); 
                if (trova_cartella==NULL) 
        { 
           printf ("\nNon è stata trovata la directory %s dove andranno salvati i file del programma.", nome); 
           printf ("\nVerrà creata la directory necessaria al programma. Premi Enter"); 
           fgets (Vuoto,2,stdin); // ERRORE LA fgets NON VIENE LETTA 
           Error=mkdir (nome); 
           if (Error==-1) 
           { 
                         printf ("\nErrore nella creazione della cartella.\n"); 
                         printf ("\nPremere il tasto 'Esc' per uscire dal programma.\n\n"); 
                         getch(); 
                         return; 
           } 
           printf ("\nLa directory %s è stata creata correttamente.\n\n", nome); 
        } 
         
        closedir (trova_cartella); 
               printf("Premi un tasto per continuare"); 
           getch(); 
           system(pulisci); 
           ad_p (nome, q); 
        int n=0; 
        while(n!=3) { 
        system(pulisci); 
        printf("Digita 1 per vedere; 2 per modificare; 3 per uscire: "); 
       // ERRORE IL NUMERO MENU NON CORRISPONDE ALLA FUNZIONE 
        scanf("%d", &n); 
        if(n==1) ad_p(nome, q); 
        else if(n==2) vd_p(nome, q); 
        else printf("Numero non corretto"); 
             } 
             } 
              
              
    
              
    /********************+FUNZIONE PER CREARE I DATI *****************/          
    void ad_p(char p [], int q) { 
         FILE *f; 
         char *dat = {"\\inf.bft"}; // ERRORE SE DEVI AGGIUNGERE IL NOME FILE OCCORRE \\
         char percorso[80]; // ERRORE SE MODIFICHI P LA MODIFICA PERMANE E SE
     //MODIFICHI ANCORA NELLA FUNZIONE PER LEGGERE NON CORRISPONDE AL PATH 
         strcpy(percorso,p);
         strcat(percorso,dat); 
         puts(percorso);
         
         if((f = fopen(percorso, "a"))== NULL) { 
               if((f = fopen(p, "w"))== NULL) { 
                     printf("Il file non può essere creato/aperto\n Premi un tasto per ritornare al menu"); 
                         getch(); 
                     return; 
                     } 
                     } 
         struct pg d; 
         printf("Digita il nome del pg: "); 
         scanf("%s", d.nome); 
         printf("Digita il cognome del pg: "); 
              scanf("%s", d.cog); 
         fwrite(&d, sizeof(struct pg), 1, f); 
         fclose(f); 
         } 
          
    /********************+FUNZIONE PER VEDERE I DATI *****************/ 
    void vd_p(char p [], int q) { 
         char *dat = {"\\inf.bft"}; 
         char percorso[80];//ERRORE se modifichi p con strcat la modifica permane
         strcpy(percorso,p);
         strcat(percorso,dat); 
         FILE *f; 
         struct pg a; 
         if((f = fopen(percorso, "r"))== NULL) { 
                             printf("Il file non puo essere aperto\n Premi un tasto per ritornare al menu"); 
                                 getch(); 
                             return; 
                      
         } 
         rewind(f); 
                              fread(&a, sizeof(struct pg), 1, f); 
         while(!feof(f)) { 
         printf("%s ", a.nome); 
              printf("%s\n", a.cog); 
                                   fread(&a, sizeof(struct pg), 1, f); 
                    } 
                    getch(); 
         fclose(f); 
         }
    Tecnologia

  4. #4
    Grazie mille. In effetti il fatto di modificare p è stata una cavolata xD

    P.S. me l'ha colorato da solo il codice xD

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.