PDA

Visualizza la versione completa : [c] puntatore a file


dogo21sob
30-11-2008, 00:37
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?

MacApp
30-11-2008, 04:00
il codice che ti causa problemi e' segreto militare?

mondobimbi
30-11-2008, 10:59
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

dogo21sob
30-11-2008, 12:41
il codice è abbastanza lungo perciò ne scriverò le parti salienti.. non l'ho scritto solo pechè pensavo di essere stato chiaro, scusate..


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..

MItaly
30-11-2008, 14:45
Secondo me ti conviene aprire direttamente il file in modalità lettura-scrittura (fopen(NomeFile, "rw")).

oregon
30-11-2008, 14:47
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 ...

dogo21sob
30-11-2008, 17:50
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..

oregon
30-11-2008, 18:00
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 ...

dogo21sob
30-11-2008, 19:56
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:


#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 :bhò:

oregon
30-11-2008, 20:49
Ma a che ti serve Path se non lo usi ?

Come viene valorizzato NomeFile?

Loading