Autore Topic: Dimensione di un file  (Letto 1133 volte)

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Dimensione di un file
« il: 03 Dicembre 2009, 15:00:10 »
Ciao a tutti, ho un nuovo problema.
Vorrei visualizzare il valore della dimensione del file User.home.
ho scritto questo codice:
Codice: [Seleziona]
hSpace = Stat(User.Home).Size

dichiarando come Public la variabile hSpace.
il valore che mi viene restituito è questo: 4096.
Ora mi chiedo: cosa sono? patate, mele...
Poi se al posto di user.home metto "/" mi restituisce il valore occupato nel mio HDD?
sostituendo mi da sempre 4096...
dando da terminale il comando df -h /
mi da questo:
Codice: [Seleziona]

File system            Dim. Usati Disp. Uso% Montato su /dev/sda1                
                       220G   34G  176G  17% /

quindi se ho ben capito lo spazio occupato del nel mio HDD è pari a 34 gb.
Perché il comando mi restituisce 4096?

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Dimensione di un file
« Risposta #1 il: 03 Dicembre 2009, 15:18:59 »
Sono Megabyte, ovvero più o meno 4GB che dovrebbe essere la dimensione della tua Home...

Il comando che hai appena usato non restituisce lo spazio occupato ma la grandezza totale di un file...a te serve la funzione DFree usabile secondo la sintassi:

Codice: [Seleziona]
DIM Dimensione AS Long

Dimensione = DFree(Indirizzo_file)

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Re: Dimensione di un file
« Risposta #2 il: 03 Dicembre 2009, 15:47:07 »
Ma DFree non restituisce lo spazio libero?

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Dimensione di un file
« Risposta #3 il: 03 Dicembre 2009, 16:08:24 »
Si...ti chiedo scusa ma avevo inteso male la richiesta...

Prova con


Codice: [Seleziona]
hSpace = Stat(User.Home, TRUE).Size


Edit: Mi correggo. Analizzando meglio si vede che il comando ti restituisce 4KB poichè esso mostra il risultato in byte...mi correggo per quanto detto prima.

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Re: Dimensione di un file
« Risposta #4 il: 04 Dicembre 2009, 16:29:48 »
Fatto, però mi restituisce sempre 4096.
Da terminale dnado df -h / mi da una dimensione di 36GB....

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Dimensione di un file
« Risposta #5 il: 04 Dicembre 2009, 16:35:56 »
E allora senza stare lì a porti problemi puoi benissimo usare il comando da terminale....tanto che ti costa? Ricorda che se la soluzione e facile per il programmatore e buona per l'utente allora è una buona soluzione...:-)

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Re: Dimensione di un file
« Risposta #6 il: 04 Dicembre 2009, 17:05:03 »
:2birre:

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: Dimensione di un file
« Risposta #7 il: 13 Dicembre 2009, 00:53:20 »
Puoi sempre usare una funzioncina cosi' (questa e' sub a dire il vero, ed e' un adattamento di una mia che mi deve mostrare un messaggio: e' ricorsiva, ma cerco sempre di evitare le shell... tutti i conti alla fine sono solo esempi, ti basta prendere la "misura" che ti interessa.

Codice: [Seleziona]
PUBLIC SUB DestinationSize(spath as string)

  DIM File AS String
  DIM l AS Long = 0
  DIM msg AS String
 
  msg = spath
  IF IsDir(spath) = FALSE THEN
    Message.Warning("No destination directory yet")
    RETURN
  ENDIF
 
  FOR EACH File IN RDir(sPath, "*.*")
    WITH Stat(spath &/ file)
      l = .Size + l
    END WITH
  NEXT
 
  msg = msg & "\n"
  msg = msg & "\nGb size: " & Format(l / 1024 ^ 3, "0.000")
  msg = msg & "\nMb size: " & Format(l / 1024 ^ 2, "0")
  msg = msg & "\nMb base 1000: " & Format(l / 1000000, "0")
  msg = msg & "\nKb size: " & Format(l / 1024, "0")
  msg = msg & "\nByte size: " & CStr(l)
  Message.Info(msg)
END

Offline Will32

  • Maestro Gambero
  • ****
  • Post: 273
  • Evviva Linux e la Programmazione
    • Mostra profilo
    • TuttoComputer
Re: Dimensione di un file
« Risposta #8 il: 30 Gennaio 2010, 17:16:38 »
Concordo con ciò che ha detto Ceskho !  ;D
Non fai prima ad usare il terminale che a fare un programma ( che non ha senso se è solo per la dimensione della home ) .
Ciao  ;)

Visita le comunità di Gambas, programma e diventa nostro amico :2birre:

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Dimensione di un file
« Risposta #9 il: 31 Gennaio 2010, 11:07:15 »
Ceskho!
Mi meraviglio di te! :)

4096 è la dimensione della sua home in MB!! Dammi subito le mani!  >:(

A parte gli scherzi, facendo un ls -la di una qualunque cartella vi accorgerete che anche le cartelle elencate hanno una dimensione. Tutti i file su un filesystem hanno una dimensione minima dei blocchi, predefinita in fase di formattazione del filesystem stesso. La dimensione dei blocchi influisce sulla dimensione massima dei file e del filesystem stesso. Una dimensione comunemente usata per i blocchi delle cartelle è proprio 4096 byte.

I blocchi sono porzioni di disco che contengono i dati. Anche se un file viene rappresentato come dimensione di 100 byte, per dire, sul disco oppurerà comunque minimo 1 blocco, cioè 4096 byte nel caso dell'amico.
Visita il mio sito personale: http://www.leonardomiliani.com