Nokioteca [Nokia] Forum: [symbian] Dimensione Cluster - Nokioteca [Nokia] Forum

Salta al contenuto

Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

[symbian] Dimensione Cluster

#1 L   memoryn70 

  • Millennium Member
  • Gruppo: Developer
  • Messaggi: 2112
  • Iscritto: 02 maggio 2007
  • Cellulare:Nokia N70
  • Firmware:5.0609.2.0.1

Inviato 13 luglio 2009 - 10:58

Ciao a tutti!
Mi chiedevo se esiste un metodo (python o c++) per avere la dimensione dei cluster di un disco sul cellulare. Mi servirebbe da usare in una formula per ricavare lo spazio occupato realmente su disco.
Mi basterebbe anche un metodo per trovare la dimensione del file su disco.

:thumbs:
0

#2 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7142
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 13 luglio 2009 - 11:34

Per le dimensioni "logiche" del file puoi usare RFile::Size()
Per sapere invece la dimensione dei cluster puoi usare:
- RFormat::Open() che credo ti restituisca il totale numero di cluster rimasti da formattare...
- RFs::Volume().iSize che ti restituisce le dimensioni complessive del drive...
Il rapporto dovrebbe darti la dimensione del cluster.

Occhio alle capabilities pero', perche' RFormat::Open() credo voglia DiskAdmin...
Altri metodi non ne conosco. :thumbs:

Messaggio modificato da Il.Socio il 13 luglio 2009 - 11:34

Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#3 L   memoryn70 

  • Millennium Member
  • Gruppo: Developer
  • Messaggi: 2112
  • Iscritto: 02 maggio 2007
  • Cellulare:Nokia N70
  • Firmware:5.0609.2.0.1

Inviato 13 luglio 2009 - 12:59

Visualizza MessaggiIl.Socio, il 13/07/2009 - 12:34, ha scritto:

Per le dimensioni "logiche" del file puoi usare RFile::Size()
Per sapere invece la dimensione dei cluster puoi usare:
- RFormat::Open() che credo ti restituisca il totale numero di cluster rimasti da formattare...
- RFs::Volume().iSize che ti restituisce le dimensioni complessive del drive...
Il rapporto dovrebbe darti la dimensione del cluster.

Occhio alle capabilities pero', perche' RFormat::Open() credo voglia DiskAdmin...
Altri metodi non ne conosco. :thumbs:


Ah che trucchetti :(
Grazie vedrò cosa mi viene fuori....

EDIT: ma per dimensioni logiche intendi la dimensione su disco (cioè se un file è di 2 k magari ne occupa 4 k su disco)

Messaggio modificato da memoryn70 il 13 luglio 2009 - 13:01

0

#4 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7142
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 13 luglio 2009 - 20:50

In questo caso, il riferimento a dimensione "logica" e' un po' ambiguo, ma non mi veniva il termine corretto...
Sostanzialmente, la Size() ti restituisce la quantita' di dati presente nel file... Non la sua reale occupazione fisica su disco, che e' dipendente dal cluster.
Se il file contiene la stringa "Pippo" allora la Size() restituisce 5 (bytes), ma fisicamente il file occupa un intero cluster (es. 4kb)

Messaggio modificato da Il.Socio il 13 luglio 2009 - 20:52

Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#5 L   pandipo 

  • Millennium Member
  • PuntoPuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 1159
  • Iscritto: 18 maggio 2007
  • Località:spinea VE
  • Cellulare:n79

Inviato 13 luglio 2009 - 22:11

Scusa, credo che si possa dedurre facilmente dal tipo di Filesystem no? Tolto il fatto che la signora Nokia ha implementato solo fat32, poi ogni fs ha la specifica dimensione dei cluster... Ho detto una cavolata?
0

#6 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7142
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 14 luglio 2009 - 08:50

Non e' un valore deducibile dalla tipologia del file-system... Ciascun file-system puo' essere formattato usando dimensioni di cluster differenti.
Ad es. fat32 puo' essere formattato usando cluster da 4kb oppure da 32kb

Stavo pensando, per evitare l'utilizzo della capability DiskAdmin, forse puoi:
- Rilevare lo spazio disponibile: RFs::Volume().iFree
- Creare un file da 1 byte
- Rilevare nuovamente lo spazio disponibile: RFs::Volume().iFree
Dovresti ottenere esattamente la dimensione del cluster...


P.S.
Il termine corretto per lo "spazio sprecato" che viene a generarsi e' detto Frammentazione Interna:
Per visualizzare questo link registrati o esegui il log in.

Messaggio modificato da Il.Socio il 14 luglio 2009 - 08:54

Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#7 L   memoryn70 

  • Millennium Member
  • Gruppo: Developer
  • Messaggi: 2112
  • Iscritto: 02 maggio 2007
  • Cellulare:Nokia N70
  • Firmware:5.0609.2.0.1

Inviato 14 luglio 2009 - 08:55

Visualizza MessaggiIl.Socio, il 14/07/2009 - 09:50, ha scritto:

Non e' un valore deducibile dalla tipologia del file-system... Ciascun file-system puo' essere formattato usando dimensioni di cluster differenti.
Ad es. fat32 puo' essere formattato usando cluster da 4kb oppure da 32kb

Stavo pensando, per evitare l'utilizzo della capability DiskAdmin, forse puoi:
- Rilevare lo spazio disponibile: RFs::Volume().iFree
- Creare un file da 1 byte
- Rilevare nuovamente lo spazio disponibile: RFs::Volume().iFree
Dovresti ottenere esattamente la dimensione del cluster...


P.S.
Il termine corretto per lo "spazio sprecato" che viene a generarsi e' detto Frammentazione Interna:
Per visualizzare questo link registrati o esegui il log in.


Si ci avevo pensato ma sai, su un cellulare cosi non è sempre detto che sia scritto solo quel file in quel momento! Quindi ora provo il metodo della formattazione (che ovviamente non faccio partire :D )
0

#8 L   pandipo 

  • Millennium Member
  • PuntoPuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 1159
  • Iscritto: 18 maggio 2007
  • Località:spinea VE
  • Cellulare:n79

Inviato 14 luglio 2009 - 09:14

Ho provato così:
from sysinfo import free_drivespace

from os import remove

drives=[u'C:',u'E:',u'D:']



for drive in drives:

	print drive

	a=free_drivespace()

	print a[drive]

	prova=open(drive+'\\a_provacl', 'w')

	prova.write('ciao')

	prova.close()

	b=free_drivespace()

	print "dimensione cluster: "+str(a[drive]-b[drive])+"bytes"

	remove(drive+u'\\a_provacl')

Mi restituisce C: 4096 b E: 32768 b D: 512b
0

#9 L   memoryn70 

  • Millennium Member
  • Gruppo: Developer
  • Messaggi: 2112
  • Iscritto: 02 maggio 2007
  • Cellulare:Nokia N70
  • Firmware:5.0609.2.0.1

Inviato 14 luglio 2009 - 09:19

Visualizza Messaggipandipo, il 14/07/2009 - 10:14, ha scritto:

Ho provato così:
from sysinfo import free_drivespace

from os import remove

drives=[u'C:',u'E:',u'D:']



for drive in drives:

	print drive

	a=free_drivespace()

	print a[drive]

	prova=open(drive+'\\a_provacl', 'w')

	prova.write('ciao')

	prova.close()

	b=free_drivespace()

	print "dimensione cluster: "+str(a[drive]-b[drive])+"bytes"

	remove(drive+u'\\a_provacl')

Mi restituisce C: 4096 b E: 32768 b D: 512b


Si questi valori però possono cambiare (soprattutto sulla memory card) infatti se tu formatti la mmc con cluster di 4k avrai più spazio (ovviamente rimettendo gli stessi file)...Ah comunque va bene la tua funzione nel caso non riesco con altri metodi. Però sarebbe molto a rischio

Messaggio modificato da memoryn70 il 14 luglio 2009 - 09:20

0

#10 L   memoryn70 

  • Millennium Member
  • Gruppo: Developer
  • Messaggi: 2112
  • Iscritto: 02 maggio 2007
  • Cellulare:Nokia N70
  • Firmware:5.0609.2.0.1

Inviato 14 luglio 2009 - 10:09

Ho fatto cosi ma provando con C: e con D: mi da lo stesso valore in entrambi i dischi!

	RFs fsSession;
	User::LeaveIfError(fsSession.Connect());
	CleanupClosePushL( fsSession );
	_LIT(KDriveC,"C:");
	RFormat format;
	TInt tracksRemaining;
	format.Open(fsSession,KDriveC,EHighDensity,tracksRemaining);
	format.Close();
	CleanupStack::PopAndDestroy(1);//fsSession
	return Py_BuildValue("i", abs(tracksRemaining));


Preso direttamente da un esempio e ho tolto la parte con un while (che conteneva format.Next...quindi formattava) e aggiunto il return per python

Messaggio modificato da memoryn70 il 14 luglio 2009 - 10:10

0

#11 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7142
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 14 luglio 2009 - 10:16

Forse ti da un valore sfalsato perche' D: e' una unita' virtuale, non puo' essere formattata nel senso stretto della parola...
Non e' altro che una porzione di RAM accessibile tramite file-system, tutto quello che vai a scriverci finisce in RAM.
Torna comoda per mettere in cache alcuni dati migliorando le prestazioni.

EDIT:
@pandipo,
non e' che potresti verificare se scrivendo 2 file in D: lo spazio disponibile diminuisce di 1024 oppure se diminuisce "solo" di 512?
Mi viene il dubbio che magari il sistema operativo la gestisce in maniera particolare trattandosi di unita' virtuale....

Messaggio modificato da Il.Socio il 14 luglio 2009 - 10:23

Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#12 L   pandipo 

  • Millennium Member
  • PuntoPuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 1159
  • Iscritto: 18 maggio 2007
  • Località:spinea VE
  • Cellulare:n79

Inviato 14 luglio 2009 - 21:53

in D diminuisce di 1024 ^^
0

Condividi questa discussione:


Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione