Programa para verificar en una determinada carpeta el espacio que ocupa en gigabyte, megabyte, kilobyte.

70 views
Skip to first unread message

Programador Desarrollador

unread,
Aug 16, 2010, 9:30:59 AM8/16/10
to Comunidad de Visual Foxpro en Español
Hola a todos. Quiero hacer un programa que me verifique una
determinado carpeta y me retorne el peso o espacio que ocupa en
gigabyte, megabyte, kilobyte, así como tambien la cantidad de archivos
encotrados.
Agredesco por favor su colaboración; saludos y gracias.



















ricardo peña

unread,
Aug 16, 2010, 10:23:03 AM8/16/10
to publice...@googlegroups.com
Hola:
 
Fíjate en la función ADIR si es lo que estás buscando.
 
Ricardo Luis Peña
Analista de Sistemas
BA - Argentina
 
> Date: Mon, 16 Aug 2010 06:30:59 -0700
> Subject: [vfp] Programa para verificar en una determinada carpeta el espacio que ocupa en gigabyte, megabyte, kilobyte.
> From: pyd.en...@gmail.com
> To: publice...@googlegroups.com

IVAN MARTINEZ

unread,
Aug 16, 2010, 11:22:26 AM8/16/10
to publice...@googlegroups.com
Comando adir

Ivan

>>>-----Mensaje original-----
>>>De: publice...@googlegroups.com
>>>[mailto:publice...@googlegroups.com] En nombre de
>>>Programador Desarrollador
>>>Enviado el: Lunes, 16 de Agosto de 2010 09:01 a.m.
>>>Para: Comunidad de Visual Foxpro en Español
>>>Asunto: [vfp] Programa para verificar en una determinada
>>>carpeta el espacio que ocupa en gigabyte, megabyte, kilobyte.

Programador Desarrollador

unread,
Aug 16, 2010, 2:59:45 PM8/16/10
to Comunidad de Visual Foxpro en Español
Okey, me verifica los archivos encotrados y los muestra, pero me
gustaria que me retorne el peso o espacio que ocupan todos en
gigabyte, megabyte, kilobyte.





On 16 ago, 10:23, ricardo peña <r...@hotmail.com> wrote:
> Hola:
>
> Fíjate en la función ADIR si es lo que estás buscando.
>
> Ricardo Luis Peña
>
> Analista de Sistemas
>
> BA - Argentina
>
>
>
> > Date: Mon, 16 Aug 2010 06:30:59 -0700
> > Subject: [vfp] Programa para verificar en una determinada carpeta el espacio que ocupa en gigabyte, megabyte, kilobyte.
> > From: pyd.en.sl...@gmail.com
> > To: publice...@googlegroups.com
>
> > Hola a todos. Quiero hacer un programa que me verifique una
> > determinado carpeta y me retorne el peso o espacio que ocupa en
> > gigabyte, megabyte, kilobyte, así como tambien la cantidad de archivos
> > encotrados.
> > Agredesco por favor su colaboración; saludos y gracias.- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Programador Desarrollador

unread,
Aug 16, 2010, 3:04:14 PM8/16/10
to Comunidad de Visual Foxpro en Español
Se me olvido colocar como lo estoy haciendo:

SET DEFAULT TO "C:\Respaldo\Todos"
gnDbcnumber = ADIR(gaDatabase, '*.*')
FOR nCount = 1 TO gnDbcnumber
? gaDatabase(nCount,1)
ENDFOR




On 16 ago, 14:59, Programador Desarrollador <pyd.en.sl...@gmail.com>
wrote:
> > - Mostrar texto de la cita -- Ocultar texto de la cita -

Luis Maria Guayan

unread,
Aug 16, 2010, 4:01:15 PM8/16/10
to publice...@googlegroups.com
La 2da. columna del array retornado por ADIR() tiene el tamaño. Mira la ayuda de ADIR()

Ej:
SET DEFAULT TO "C:\Software\"

gnDbcnumber = ADIR(gaDatabase, '*.*')
FOR nCount = 1 TO gnDbcnumber
   ? gaDatabase(nCount,1), gaDatabase(nCount,2)
ENDFOR

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Programador Desarrollador

unread,
Aug 16, 2010, 4:47:24 PM8/16/10
to Comunidad de Visual Foxpro en Español
Gracias por responder.

Como hago para sumar el peso de todos los archivos, o como puedo hacer
para saber el peso o espacio que ocupa la carpeta o todos los archivos
(en gigabyte, megabyte ó kilobyte).

Por ejemplo, yo le doy un click con el botón secundario del mouse a la
carpeta "Respaldo" y me aparece la opción del menú desplegable
"Propiedades" y seguidamente aparece una pequeña pantalla con la
siguiente información:

Ubicación: C:\Respaldo

Tamaño: 143 MB (150.125.830 bytes)

Tamaño en 143 MB (150.142.976 bytes)
disco:

Contiene: 10 archivos, 0 carpetas

Necesito que me aparesca algo así como "Tamaño en disco:" es eso lo
que necesito para poder saber el peso de dicho carpeta y hacer mis
respaldo en CD o DVD dependiendo del peso de dicha carpeta.





On 16 ago, 16:01, Luis Maria Guayan <luisma...@portalfox.com> wrote:
> La 2da. columna del array retornado por ADIR() tiene el tamaño. Mira la ayuda de ADIR()
> Ej:
> SET DEFAULT TO "C:\Software\"
> gnDbcnumber = ADIR(gaDatabase, '*.*')
> FOR nCount = 1 TO gnDbcnumber
>    ? gaDatabase(nCount,1), gaDatabase(nCount,2)
> ENDFOR
>
> Luis María Guayán
> Tucumán, Argentina
> _________________________http://www.PortalFox.com
> Nada corre como un zorro
> _________________________
>
>
> El 16/08/2010 16:04, Programador Desarrollador escribió:Se me olvido colocar como lo estoy haciendo: SET DEFAULT TO "C:\Respaldo\Todos" gnDbcnumber = ADIR(gaDatabase, '*.*') FOR nCount = 1 TO gnDbcnumber ? gaDatabase(nCount,1) ENDFOR On 16 ago, 14:59, Programador Desarrollador<pyd.en.sl...@gmail.com>wrote:Okey, me verifica los archivos encotrados y los muestra, pero me gustaria que me retorne el peso o espacio que ocupan todos en gigabyte, megabyte, kilobyte. On 16 ago, 10:23, ricardo peña<r...@hotmail.com>wrote:Hola:Fíjate en la función ADIR si es lo que estás buscando.Ricardo Luis PeñaAnalista de SistemasBA - ArgentinaDate: Mon, 16 Aug 2010 06:30:59 -0700 Subject: [vfp] Programa para verificar en una determinada carpeta el espacio que ocupa en gigabyte, megabyte, kilobyte. From:pyd.en.sl...@gmail.comTo:publice...@googlegroups.comHola a todos. Quiero hacer un programa que me verifique una determinado carpeta y me retorne el peso o espacio que ocupa en gigabyte, megabyte, kilobyte, así como tambien la cantidad de archivos encotrados. Agredesco por favor su colaboración; saludos y gracias.- Ocultar texto de la cita -- Mostrar texto de la cita -- Ocultar texto de la cita -- Mostrar texto de la cita -

Luis Maria Guayan

unread,
Aug 16, 2010, 5:59:29 PM8/16/10
to publice...@googlegroups.com
Como lo tienes, puedes hacer


SET DEFAULT TO "C:\Software\"
lnArchivos = ADIR(laArchivos, '*.*')
lnTamanio = 0
FOR lnI = 1 TO lnArchivos
   ? laArchivos(lnI,1), laArchivos(lnI,2)
   lnTamanio = lnTamanio + laArchivos(lnI,2)
ENDFOR
? TRANSFORM(lnArchivos) + " Archivos"
? TRANSFORM(lnTamanio, "999,999,999,999") + " Bytes"

Pero creo que lo mejor es que utilices el FileSystemObject

CLEAR
oFS = CREATEOBJECT('Scripting.FileSystemObject')
oFolder = fso.GetFolder("c:\Software")
? ADDBS(oFolder.PATH), TRANSFORM(oFolder.SIZE) , "bytes"
? oFolder.FILES.COUNT, "Archivos"
? ofolder.SubFolders.COUNT, "Carpetas"
WAIT WINDOW
FOR EACH oFile IN oFolder.FILES
  ? ADDBS(oFile.ParentFolder.PATH)+oFile.NAME, oFile.SIZE , "bytes"
ENDFOR
WAIT WINDOW
FOR EACH oSu IN oFolder.SubFolders
  ? ADDBS(oSu.ParentFolder.PATH)+oSu.NAME, oSu.SIZE , "bytes"

ENDFOR

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


Luis Maria Guayan

unread,
Aug 16, 2010, 6:11:16 PM8/16/10
to publice...@googlegroups.com
Mira, encontre una rutina de Anders Altberg que te genera un cursor con toda la info


CREATE CURSOR FILES (folderr CHAR(50), FILE CHAR(50), SIZE INT, DATE DATETIME)
PRIVATE lnFiles, lnFolders,oFolder
o = CREATEOBJECT('Scripting.FilesystemObject')
lcFolder = GETDIR()
lnFiles=0
lnFolders=0
oFolder=o.Getfolder(lcFolder)

FOR EACH oFile IN oFolder.FILES
  INSERT INTO FILES VALUES (oFile.ParentFolder.NAME,oFile.NAME, oFile.SIZE,oFile.datecreated)
NEXT
lnFiles = lnFiles + oFolder.FILES.COUNT
? TRANSFORM(oFolder.Size), 'bytes'
GetSubFolders(oFolder)
? 'Totals:',lnFiles,'files', lnFolders,'subfolders'
BROWSE
FUNCTION GetSubFolders (oFolder)
  lnFolders = lnFolders +oFolder.subfolders.COUNT
  DEBUGOUT oFolder.NAME,lnFiles
  FOR EACH oo IN oFolder.subfolders
    lnFiles = lnFiles + oo.FILES.COUNT
    * Debugout oo.Name, oo.Files.Count
    FOR EACH oFile IN oo.FILES
      INSERT INTO FILES VALUES (oFile.ParentFolder.NAME,oFile.NAME, oFile.SIZE,oFile.datecreated)
    NEXT
    IF oo.subfolders.COUNT>0
      GetSubFolders (oo)
    ENDIF
  NEXT
ENDFUNC


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


Julio Cesar Vente Ruiz

unread,
Aug 16, 2010, 6:15:00 PM8/16/10
to publice...@googlegroups.com
Hola, este par de funciones adaptandolas te pueden servir...


******* INFORMACION DE UN ARCHIVO
* VNOMBRE    = Ruta y nomrbe archivo
* VR        = Tipo de informacion requerida
FUNCTION INFOFILE(VNOMBRE,VR)
    oFSO   = CREATEOBJECT("Scripting.FileSystemObject")
    *VNOMBRE = GETFILE()
    oFile  = oFSO.GetFile(VNOMBRE) && TOMO DATOS DEL ARCHIVO
   
    DO CASE
        CASE VR==0
            RETURN oFile.Name
*            ? oFile.Name              && Nombre
        CASE VR==1
            RETURN JUSTPATH(VNOMBRE)+"\"
*            ? JUSTPATH(lcFile)        && Ubicación
        CASE VR==2
            RETURN oFile.Type
*            ? oFile.Type              && Tipo de archivo
        CASE VR==3
            RETURN oFile.Size
*            ? oFile.Size              && Tamaño en bytes
        CASE VR==4
            RETURN oFile.Attributes
*            ? oFile.Attributes        && Atributos
        CASE VR==5
            RETURN oFile.DateCreated
*            ? oFile.DateCreated       && Fecha de creación
        CASE VR==6
            RETURN oFile.DateLastAccessed
*            ? oFile.DateLastAccessed  && Fecha de accedido
        CASE VR==7
            RETURN oFile.DateLastModified
*            ? oFile.DateLastModified  && Fecha de modificado
    ENDCASE
ENDFUNC


*** COPIAR TODO UN DIRECTORIO A OTRO DIRECTORIO
* lcOrigen        = Directorio Origen
* lcDestino        = Directorio Destino
FUNCTION COPIADIR(lcOrigen,lcDestino)
    DECLARE INTEGER CopyFile IN kernel32;
            STRING  lpExistingFileName,;
            STRING  lpNewFileName,;
            INTEGER bFailIfExists

    *lcOrigen = "C:\CDOC"
    *lcDestino ="L:\IVECO"
           
    lcFilesOri = lcOrigen  + "\*.*"
    lcFilesDes = lcDestino + "\*.*"
    cnFilesOri = adir(lcOriFiles,lcFilesOri)
    cnFilesDes = adir(lcDesFiles,lcFilesDes)

    FOR i=1 TO cnFilesOri
        llCopiar = .t.
        lnNombreOri = lcOriFiles(i,1)
        lnWidthOri  = lcOriFiles(i,2)
        lnFechaOri  = lcOriFiles(i,3)
        lnHoraOri   = lcOriFiles(i,4)
       
        lcNameFileF = lcOrigen  + "\" + lnNombreOri
        lcNameFileT = lcDestino + "\" + lnNombreOri
       
        FOR j=1 TO cnFilesDes
            lnNombreDes = lcDesFiles(J,1)
            lnWidthDes  = lcDesFiles(J,2)
            lnFechaDes  = lcDesFiles(J,3)
            lnHoraDes   = lcDesFiles(J,4)
           
            IF lnNombreOri == lnNombreDes             &&  Nombre
               IF lnFechaOri  > lnFechaDes           &&  Fecha
                  llCopiar = .t.
               ELSE
                  IF lnWidthOri # lnWidthDes         &&  Tamaño
                     llCopiar = .t.
                  ELSE
                     IF lnHoraOri # lnHoraDes        &&  Hora
                        llCopiar = .t.
                     ELSE
                        llCopiar = .F.
                     ENDIF
                  ENDIF
               ENDIF
            ENDIF
        ENDFOR
       
        IF llCopiar
    *       WAIT WINDOW "Copiando " + lnNombreOri  NOWAIT
           LnCopyfile = CopyFile (lcNameFileF, lcNameFileT, 0)
           WAIT CLEAR
          
           *---
           IF LnCopyfile==0     &&   No se puedo realizar la copia
              cMessageTitle = 'Advertencia'
              cMessageText = 'Por el momento no se puede respaldar el Archivo  "'  +;
                              lnNombreOri  +'"' +  chr(13) +;
                             'Se recomienda hacerlo mas tarde.'
              nDialogType = 0 + 16
              nAnswer = MESSAGEBOX(cMessageText, nDialogType, cMessageTitle)
           ELSE
                          &&   Copia realizado con exito.
           ENDIF
           *---
                     
        ENDIF       
    ENDFOR
   
ENDFUNC
--


Julio Cesar Vente Ruiz

Walter R. Ojeda Valiente

unread,
Aug 16, 2010, 6:19:02 PM8/16/10
to publice...@googlegroups.com
Si es cuestión de respaldo, entonces te conviene primero comprimirlos como .ZIP, .RAR, .CAB, etc.

El tamaño que un archivo ocupa en disco es siempre múltiplo de 1024.

Tamaño del archivo          Espacio en disco
1 byte                                    1024 bytes
250 bytes                               1024 bytes
1023 bytes                             1024 byes
1024 bytes                             1024 bytes
1025 bytes                             2048 bytes

Así que el tamaño ocupado en disco sería:

TamanoEnDisco = (Int((TamanoEnBytes - 1) / 1024) + 1) * 1024

Bueno, a decir verdad no estoy seguro que se siga usando 1024, quizás ahora se use 2048, 4096, 8192, o algún otro múltiplo de 1024.

Saludos.

Walter.


IVAN MARTINEZ

unread,
Aug 16, 2010, 7:30:13 PM8/16/10
to publice...@googlegroups.com
Hay algo que se llama multiplicacion o division por 10,100, 1000 o cual
cantidad de ceros que quieras ponerle.
Esto no lo vayas a buscar en la ayuda de foxpro.

Ivan Martinez

>>>-----Mensaje original-----
>>>De: publice...@googlegroups.com
>>>[mailto:publice...@googlegroups.com] En nombre de
>>>Programador Desarrollador

>>>Enviado el: Lunes, 16 de Agosto de 2010 02:30 p.m.


>>>Para: Comunidad de Visual Foxpro en Español

>>>Asunto: [vfp] Re: Programa para verificar en una determinada

Reply all
Reply to author
Forward
0 new messages