Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: [c] puntatore a file

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271

    [c] puntatore a file

    ho bisogno di scrivere un file che è stato in precedenza letto, è possibile farlo conservando il puntatore al file?

    ho provato a dichiarare il puntatore al file nel main e lo passo prima alla procedura che carica e poi a quella che salva, in esecuzione crasha quando deve scrivere sul file che era già stato aperto in lettura e non chiuso.. ho provato anche a chiuderlo dopo la lettura e a riaprirlo usando lo stesso puntatore ma non funziona.. qualche idea?

  2. #2

  3. #3
    quando associ ad un file un descrittore questo identifica il file finchè non rilasciato il descrittore. Normalmente è meglio rilasciare il descrittore dopo il suo uso dato che è una risorsa limitata.
    Lo stesso discorso vale anche per i puntatori a file che è una struttura che ha al suo interno un campo che è proprio il descrittore ( il campo fd ).
    Per capire perchè il tuo programma va in crash occorre però vedere il codice che hai scritto.
    ciao
    sergio

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    il codice è abbastanza lungo perciò ne scriverò le parti salienti.. non l'ho scritto solo pechè pensavo di essere stato chiaro, scusate..

    codice:
    int main(void)
    {
        FILE *Pf;
    
        ApriFile(Pf);
        ChiudiFile(Pf);
    }
    
    void ApriFile(FILE *Pf)
    {
        char NomeFile[dim];
     
        Pf = fopen(NomeFile,"r");
        fclose(Pf);
    }
    
    void ChiudiFile(Pf)
    {
        // qui deve riaprire lo stesso file in scrittura
    }
    ok il codice crashava perchè la seconda funziona era scritta male.. quindi l'ho lasciata vuota.. cosa dovrei mettere ora in ChiudiFile per fare in modo che il file aperto in lettura in ApriFile sia ora aperto in scrittura..
    NomeFile[dim] viene inserito in ApriFile, come faccio a definirlo nel main e passarlo come parametro a ApriFile che lo modifica e poi ripassarlo, modificato, a ChiudiFile? Anche così si potrebbe risolvere..

  5. #5
    Secondo me ti conviene aprire direttamente il file in modalità lettura-scrittura (fopen(NomeFile, "rw")).
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da MItaly
    Secondo me ti conviene aprire direttamente il file in modalità lettura-scrittura (fopen(NomeFile, "rw")).
    Concordo ... non capisco l'utilità di tutti questi passaggi con il puntatore al file ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    il file viene aperto in caricafile, se lo apro in lettura e scrittura e lo leggo..
    poi quando dovrò scriverci su all'interno di chiudifile come faccio?
    il problema che non capite è che devo accedere allo stesso file in 2 procedure diverse per forza, in una lo leggo e in un'altra lo riscrivo..

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da dogo21sob
    il file viene aperto in caricafile,
    Cosa e' caricafile ? Non l'hai mai mostrato ...

    se lo apro in lettura e scrittura e lo leggo..
    poi quando dovrò scriverci su all'interno di chiudifile come faccio?
    Ci hai provato ?

    il problema che non capite
    Veramente abbiamo tutti capito che stai seguendo la strada sbagliata ... ma se non accetti i consigli ...

    è che devo accedere allo stesso file in 2 procedure diverse per forza, in una lo leggo e in un'altra lo riscrivo..
    Lo si fa normalmente ... perche' tutti questi problemi?

    Mostra il codice completo di quello che vuoi fare con i file ... (mi raccomando, completo ...) e vediamo come modificarlo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    scusa, non ci siamo capiti.. quando dicevo che voi non capite intendevo di non riuscire a farvi capire quello che volevo dire (molto probabilmente per una mia mancanza nella conoscenza della giusta terminologia) e se sono qui è solo perchè ho chiaramente bisogno di aiuto e consigli.. questo è il codice da correggere:

    codice:
    #define LENMAX 100
    
    int main
    {
       FILE *Pf;
       char Path[LENMAX];
    
       Carica(Path);
       system("pause");
       Salva(Path);
    }
    
    void Carica(char *Path)
    {
       FILE *Pf;
    
       // leggo il path completo del file e lo memorizzo in path
       Pf = fopen(NomeFile,"r");
       // leggo i dati che mi interessano dal file
       fclose(Pf);
    }
    
    void Salva(char *Path)
    {
       FILE *Pf;
    
       Pf = fopen(NomeFile,"w");
       // scrivo sul file i dati che mi interessano
       fclose(Pf);
    }
    Lanciando il programma procede regolarmente fino alla pausa, dopo crasha! il codice che uso che per scrivere sul file i dati che mi interessano è superfluo perchè pure eliminandolo, facendo solo fopen e fclose crasha..
    il codice completo non posso metterlo perchè si tratta di un progetto per l'uni e ci stanno gli altri studenti in giro sul forum e se escono 2 pezzi di codice proprio uguale in 2 progetti diversi sono guai!
    Spero di essere stato più chiaro questa volta

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma a che ti serve Path se non lo usi ?

    Come viene valorizzato NomeFile?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.