PDA

Visualizza la versione completa : problema lettura file con c


carmineabomb
04-01-2005, 17:00
Salve ragazzi sono nuovissimo del c (Lo studio da ciraca 1 ora), però sono un programmatore php.
Ho fatto qualke linea di codice però nn mi funziona:



int main(int argc,char **argv,char **envp)
{
#define BUFSIZE 102
int i;
size_t bytes;
char temp[BUFSIZE];
FILE *in;
printf("Hai passato %i parametri\n", argc-1);
for(i=1;i<argc;i++){
printf("Parametro %i :",i);
printf("%s\n",argv[i]);
}
in=fopen("argv[1]","r+");
while(bytes = fread(temp,sizeof(char),BUFSIZE,in)){
printf("%s\n",temp);
}
}

questo programma dovrebbe stamparmi i parametri ke gli invio e poi deve leggere e stampare a video il file ke gli invio come primo parametro.
perkè nn funziona???
Se qualcuno vuole aiutarmi mi spiega un pò kome funziona fread() e fwrite().

edriv
04-01-2005, 18:32
in=fopen("argv[1]","r+");

Qui è l'errore! devi scrivere:



in=fopen(argv[1],"r+");


altrimenti lui cerca il file "argv[1]", non quello nel primo argomento! LOL

E poi metti il #DEFINE all'inizio, fuori da tutto.

netarrow
04-01-2005, 19:00
Nelle Pillole (http://forum.html.it/forum/showthread.php?s=&threadid=214612) si è molto parlato della gestione di I/O da file in C.

:ciauz:

carmineabomb
04-01-2005, 19:25
il problema è ke nn ho capito bene la funzione fread e fwrite anke in php esistono queste 2 funzioni però sono diverse.
esempio fread in php;

$fp=fopen("miofile.txt","r");
$lettura=fread($fp,1024);

in questo modo mette il contenuto del file nella variabile $lettura.
1024 è la lungezza del file.

per favore mi spiegate in dettaglio la funzione fread e fwrite???
ho letto le guide e la pillola ma nn ho capito molto.

netarrow
04-01-2005, 19:53
Allora, firma stilizzata:

fread (dove_metto_i_bytes, da_dove_parto, dove_arrivo, che_FILE_usare)


quel dove metto i bytes è un void*, ovvero un puntatore a qualsiasi tipo di dato(credo, puntarore a niente... non saprei definirlo :fagiano: ), visto che è richiesto un puntatore(e che verrà modificato quindi è necessario passarlo per riferimento e non per valore come è di default) devi passare non una variabile, ma l'indirizzo della variabile usando &(operatore riferimento).
Da dove parto indica da che byte patire, e dove_arrivo l'ultimo byte da leggere sarà dove_arrivo-1, che_FILE_usare mi sembra semplice, l'handle FILE che rappresenta appunto il file da leggere.

Stesso discorso per fwrite, ma in buffer ci saranno i byte da scrivere nel file, basterà passare il buffer per valore(& non necessario), e da_dove_parto e dove_arrivo saranno riferiti all'array in questione.

:ciauz:

Esempio:



#include <stdio.h>

int main ()
{
FILE *file;
char buffer[30];

file = fopen ("Esempio.txt", "r");
fread (&buffer, 1, 30, file);
buffer[30] = '\0';//1 byte in + per il carattere di fine stringa
printf("%s", buffer);

return 0;
}


:ciauz:

netarrow
04-01-2005, 19:59
comunque dopo 1 ora che studi il C già devi vedertela con i file :oVVoVe: ?

TI conviene trovarti un bel tutorial che parte da 0 o meglio ancora un libro completo e approfondito(se ne trovano di free da scaricare in pdf).

:ciauz:

carmineabomb
04-01-2005, 20:14
siccome programmo olto bene con il php la maggior parte delle cose le so già es:
tipo di dati,cicli,condizioni,array

mi deco abituare solo ad una cosa: La dikiarazione delle variabili

carmineabomb
04-01-2005, 20:22
grazie di tutto ora funziona perfettamente
voglio kiedere un'ultima cosa:
Posso fare un fopen utilizzando un url oppure devo affrontare i socket???

netarrow
04-01-2005, 22:17
si puoi farlo, attento che in linux o mac il carattere separatore è /, in windows è \ che corrisponde al carattere per fare le combinazioni escape come \n ecc... quindi dovrai usare \\ e fare path simili a questo:

C:\\windows\\Desktop\\Miofile.txt

Inoltre, fai attezione che tra C e php le differenza non sono solo le variabili, non biosogna dimenticare che php è un linguaggio di scripting server-side, il C è primo linguaggio "all-purpose" di un certo successo, quindi ci sono moltissimi aspetti che php esclude.

:ciauz:

netarrow
04-01-2005, 22:24
a scusa, ho capito male il post, se devi connetterti ad un url devi usre le socket si, ma si implementano in modo diverso su ogni OS, anche se dovrebbero esistere delle librerie di terze parti che aggiungono un livello in più di astrazione e permettono di compilare il programma sia su linux sia su windows o altri OS.

:ciauz:

Loading