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
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
E che ce vuole ?
fattocodice:typedef struct _Node { FILE *fp; struct _Node *next; }FilePointerNode;
grazie mille......
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
No MP tecnici (non rispondo nemmeno!), usa il forum.
Ti crei una funziona che crea un nodo e lo istanzia correttamente.
Poi fai:codice:FilePointerNode* makeNewNode(const char *filename){ /*Crea un nuovo nodo*/ /*Apre il file*/ /*Restituisce il nodo*/ }
codice:FilePointerNode *firstNode = makeNewNode("testo1.txt"); FilePointerNode *secondNode = makeNewNode("testo2.txt"); firstNode->next = secondNode;
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.codice:.. FILE * fp; ...
Seguendo l'esempio di menphisx
prova a buttare giù qualcosa tucodice:FilePointerNode firstNode; FilePointerNode secondNode; firstNode.fp = fopen("testo1.txt", "r"); secondNode.fp = fopen("testo2.txt", "r"); firstNode.next = &secondNode; secondNode.next = NULL;
ciao
sergio
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
ma questa è solo una funzione.codice:FilePointerNode* makeNewNode( const char *filename ) { FilePointerNode* node = (FilePointerNode *) malloc (sizeof (FilePointerNode*)); node->fp = fopen (filename, "r"); node->next = NULL; return node; };
ciao
sergio
a me è venuta in mente questa implementazione, seguendo le tracce di questo post, guarda se ti funziona
ciaocodice:#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 ) ; }
sergio