|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Apr 2008
Messaggi: 188
|
[C] Salvare documenti maggiori di 16mb
Ciao a tutti!
Fra poco devo dare l'esame di linguaggio C ( "Salvataggio su file di tutti i documenti la cui dimensione sia maggiore di 16777216(16MByte)" Di sicuro sarò io che sono noob Grazie! |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Apr 2008
Messaggi: 188
|
Nessuno?
|
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Apr 2008
Messaggi: 188
|
Help please!!
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
la tua richiesta è poco chiara così com'e' nessuno ti potra' essere d'aiuto.
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati. |
|
|
|
|
|
#5 | |
|
Bannato
Iscritto dal: Apr 2008
Messaggi: 188
|
Quote:
Devo riuscire a salvare, fra una lista di documenti che ho, solo quelli che hanno una dimensione superiore a 16mb(16777216 byte). Spero che sia chiara sennò scrivo tutto il testo.. |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Quote:
se conosci gia i nomi dei files ti basta semplicemente aprire ogni file per vedere la dimensione . Codice:
FILE *fin= fopen( NOME_FILE_INPUT , "rb");
size_t filesize;
fseek(fin, 0, SEEK_END);
filesize = ftell(fin);
fseek(fin, 0, SEEK_SET);
if(filesize > 16777216)
{
// apri un nuovo file in wb
while( 1 )
{
readed = fread( buffer , 1, 65535, fin );
// se EOF e 0 byte letti , esci con break
// altrimenti con fwrite scrivi sul nuovo file
}
}
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati. |
|
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Apr 2008
Messaggi: 188
|
Hai capito bene intendevo proprio questo...se puo essere utile posso mettere il testo del compito (è abbastanza facile come compito sono io che non sono bravo
Quote:
Codice:
void documenti(albero a){
int documento;
Tlista tmp;
FILE *fp;
printf("Inserisci tipo di documento: ");
scanf("%d", &documento);
if(documento==0) {
if(tmp->dato.dimensione > 16777216);
if((fp=fopen("Informazioni.txt", "w"))==NULL) exit(-1);{
fprintf(fp, "%s", a->dato.indirizzo);
}
}
else printf("Dimensione inferiore a 16 Mb\n");
if(documento==1) {
if(tmp->dato.dimensione > 100);
if((fp=fopen("Informazioni.txt", "w"))==NULL) exit(-1);{
fprintf(fp, "%s", a->dato.cliente);
}
}
else printf("Dimensione inferiore a 100 pagine\n");
}
}
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
lo dicevo io che era poco chiaro...
quindi tu non hai dei files e ne devi calcolare la dimensione ( quindi fseek e ftell non ti servono ) tu hai un file strutturato in un determinato modo , dal quale devi leggere tutti i dati e li devi caricare in memoria in una struct e poi in un albero binario ordinato secondo il codice documento. Una volta che hai tutto in memoria, devi cercare in tutti i nodi dell'albero , tutti i records che abbiano il campo dimensione maggiore di 10 o 16MB e quindi li devi salvare su file.
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati. |
|
|
|
|
|
#9 |
|
Bannato
Iscritto dal: Apr 2008
Messaggi: 188
|
Si in effetti rileggendo non sono stato chiaro mi scuso..
Comunque si devo salvare i file che hanno la dimensione maggiore a 100 pagine (se sono cartacei) o a 16Mb (se sono elettronici). Il codice che ho postato io non va bene? Comunque grazie per la risposta. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Non credo che vada vene perche tu utilizzi scanf per dire che tipo di documento è , in questo modo inserisci l'input tu direttamente piuttosto che leggerlo dai dati che hai caricato in memoria nella fase iniziale.
La prima funzione che devi implementare è quella di leggere i dati dal file e caricarli in memoria in una struttura ad albero binario dopo che hai tutto in memoria scansionando tutto l'albero per ogni nodo controllerai sei nei dati il valore documento è 1 o 0 e in base a questo valore se è piu grande di 10 o 16MB qualcosa come Codice:
if(nodo->dato.documento == 0 )
{
if(nodo->dato.dimensione > 16777216)
{
// scrivo su file
}
}
else
{
if(nodo->dato.dimensione > 10)
{
// scrivo su file
}
}
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati. |
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Apr 2008
Messaggi: 188
|
Grazie mille ho fatto come hai detto tu e ha funzionato
Però riguardando il compito io avevo fatto il punto 3 nella stessa maniera del 4..quindi dovrei cambiare pure questo nella stessa maniera di come ho fatto prima giusto? |
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Apr 2008
Messaggi: 188
|
EDIT:
DOPPIO |
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Apr 2008
Messaggi: 188
|
EDIT:
TRIPLO (Non so come sia possibile!) |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
credo che nel punto 3 uno scanf ci debba essere, per dirgli da quale data in poi vuoi che stampi i risultati , per il resto devi leggere tutti i valori dai dati che ha in memoria
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati. |
|
|
|
|
|
#15 |
|
Bannato
Iscritto dal: Apr 2008
Messaggi: 188
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:34.




















