PDA

Visualizza la versione completa : [C] Lista di puntatori a file


streuso83
17-06-2008, 18:37
ciao a tutti, questo il mio primo post...
vorrei sapere se possibile (ed eventualmente il codice) creare una lista di puntatori a file in C. Praticamente ogni campo della lista deve puntare a un file di testo.grazie

menphisx
17-06-2008, 18:47
E che ce vuole ?



typedef struct _Node {

FILE *fp;
struct _Node *next;

}FilePointerNode;



fatto

:ciauz:

streuso83
17-06-2008, 18:52
grazie mille...... :)

streuso83
17-06-2008, 19:27
ma se volessi aggiungere 2 file ,ad es testo1.txt e testo2.txt, che devo fare?quindi avere il primo elemento della lista che punta a testo1 e il secondo a testo2....grazie

oregon
17-06-2008, 19:37
http://en.wikipedia.org/wiki/Linked_list

menphisx
17-06-2008, 19:40
Ti crei una funziona che crea un nodo e lo istanzia correttamente.


FilePointerNode* makeNewNode(const char *filename){

/*Crea un nuovo nodo*/
/*Apre il file*/
/*Restituisce il nodo*/

}


Poi fai:


FilePointerNode *firstNode = makeNewNode("testo1.txt");
FilePointerNode *secondNode = makeNewNode("testo2.txt");

firstNode->next = secondNode;


:ciauz:

mondobimbi
17-06-2008, 22:18
..
FILE * fp;
...


Ogni file prima di essere letto o scritto deve essere aperto. Questa operazione si fa generalmente con una chiamata alla funzione fopen che restituisce un puntatore ad una struttura dati chiamato "file pointer" e definito in stdio.h che deve essere utilizzato per tutte le operazioni successive.

Seguendo l'esempio di menphisx




FilePointerNode firstNode;
FilePointerNode secondNode;

firstNode.fp = fopen("testo1.txt", "r");
secondNode.fp = fopen("testo2.txt", "r");
firstNode.next = &secondNode;
secondNode.next = NULL;



prova a buttare gi qualcosa tu
ciao
sergio

streuso83
18-06-2008, 17:39
Il mio problema il seguente:
il mio programma in FLEX/BISON analizza una pagina HTML, se all'interno trova un link ad altre pagine le scarica e dopo aver finito la principale analizza quelle linkate. Voglio creare una lista di puntatori a file in cui ogni elemento della lista punti ad un singolo file (che rappresenta la pagina linkata). Ho seguito i vostri suggerimenti e ho buttato giu questo codice ma non mi sembra molto corretto....sopratutto per l'uso dei puntatori e il file che passo.

#include <stdio.h>
#include <malloc.h>

typedef struct _Node {

FILE *fp;
struct _Node *next;

}FilePointerNode;

FilePointerNode* firstNode=NULL;
FilePointerNode* ausNode=NULL;

FilePointerNode* makeNewNode(const char *filename){
if (firstNode==NULL) //se la lista vuota
{
firstNode=(struct _Node *)malloc(sizeof(struct _Node));
firstNode->fp=("testo2.txt");
firstNode->next=NULL;
ausNode=firstNode;
}
else {
while (ausNode->next !=NULL) ausNode=ausNode->next;
ausNode->next=(struct _Node *)malloc(sizeof(struct _Node));
ausNode=ausNode->next;
ausNode->fp=("altro puntatore a file che si trova in una cartella");
ausNode->next=NULL;
};
return(firstNode);
};


Help me please :dh:

mondobimbi
18-06-2008, 17:51
FilePointerNode* makeNewNode( const char *filename ) {

FilePointerNode* node = (FilePointerNode *) malloc (sizeof (FilePointerNode*));
node->fp = fopen (filename, "r");
node->next = NULL;

return node;
};


ma questa solo una funzione.

ciao
sergio

mondobimbi
18-06-2008, 18:08
a me venuta in mente questa implementazione, seguendo le tracce di questo post, guarda se ti funziona



#include <stdio.h>
#include <malloc.h>

typedef struct _Node {

FILE *fp;
struct _Node *next;

} FilePointerNode;

FilePointerNode* firstNode = NULL;
FilePointerNode* ausNode = NULL;

FilePointerNode* makeNewNode( const char *filename ) {

FilePointerNode* node = (FilePointerNode *) malloc ( sizeof ( FilePointerNode ) );
node->fp = fopen (filename, "r");
node->next = NULL;

return node;

};

FilePointerNode* addNode (FilePointerNode *root, const char *filename ) {

if ( !root )
return makeNewNode( filename );
else {

FilePointerNode* node = root ;
while ( node->next ) node = node->next ;
return node->next = makeNewNode( filename );

}

};

int main ()
{

FilePointerNode* root = addNode ( NULL, "testo1.txt" ) ;
addNode ( root, "testo2.txt" ) ;

return ( 0 ) ;
}



ciao
sergio

Loading