![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
FilesizebyName me da el siguiente error al compilar: Identificador no declarado; segun he leido tengo que declarar idglobal en la cláusula Uses
pero aún así me sigue dando el mismo error; ¿Que es lo que hago mal?. No obstante he encontrado este código http://www.delphi3000.com/articles/article_2686.asp que funciona muy bién. //======================================================== function GetFileSize(FileName: String): Integer; var FS: TFileStream; begin try FS := TFileStream.Create(Filename, fmOpenRead); except Result := -1; end; if Result <> -1 then Result := FS.Size; FS.Free; end; //======================================================== ========================================================== Example of use: ========================================================== procedure TForm1.FormCreate(Sender: TObject); begin ShowMessage(IntToStr(GetFileSize('c:\prova.pdf'))); end; ========================================================== Saludos. |
#2
|
||||
|
||||
Una vez q agregues la libreria (o unidad, no se como le digan) no deberia dar el error.
la otra manera q plasmas tambien es vàlida
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad." Simón Bolívar (Carta al Coronel Inglés Patricio Cambell 05/08/1829). |
#3
|
||||
|
||||
Deberías declarar el Resultado como Int64, por aquello de archivos grandes.
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#4
|
|||
|
|||
Todas las respuestas me están siendo de gran ayuda.
Gracias a todos. Por cierto,¿Donde puñetas encuentro la guía de estilo?. Gracias otra vez. |
#5
|
|||
|
|||
El Código sigue siendo erróneo
En fin. El caso es que me gustaría comprender como delphi trata los ficheros via API-Windows.
![]() He escrito el siguiente código al objeto de tratar el tipo TByHandleFileInformation. Según "Los Tomos de delphi: Núcleo del Api-Win32" ed. Danysoft 1999 viene definido de la siguiente forma: TByHandleFileInformation = record dwFileAttributes: DWORD; ftCreationTime: TFileTime; ftLastAccessTime: TfileTime; ftLastWriteTime: TFileTime; dwVolumeSerialNumber: DWORD; nFileSizeHigh: DWORD; nFileSizeLow: DWORD; nNumberOfLinks: DWORD; nFileIndexHigh: DWORD; nFileIndexLow: DWORD; end. Pues bien, he escrito el siguiente código al objeto de comprobar el tipo: procedure TForm1.Button3Click(Sender: TObject); var hfile: integer; fileinfo: tbyhandlefileinformation; tamaño1,tamaño2:dword; begin tamaño1:=0; tamaño2:=0; hfile:=CreateFile(PChar(ShelllistView1.SelectedFolder.PathName), generic_read,0,@security,Open_existing,file_attribute_normal,0); if (hfile=invalid_handle_value) then Label1.Caption:='Handle Invalido' else Begin getfileinformationbyhandle(hfile,fileinfo); tamaño1:=fileinfo.nFileSizelow; tamaño2:=fileinfo.nfilesizeHigh; Label2.Caption:=inttostr(tamaño1); Label3.Caption:=inttostr(tamaño2); closehandle(hfile) end; tamaño1 siempre me da el valor 2.012.174.878 y tamaño2: 2.010.279.026 ![]() mientras que con el código de http://www.delphi3000.com/articles/article_2686.asp obtengo siempre el tamaño correcto. ¿Que es lo que está mal en el código anterior? Los tipos están declarados como DWORD, igual que en el registro, las variables inicializadas, el Handle no me da error, etc, etc. Gracias por vuestro valioso tiempo. Saludos. |
#6
|
||||
|
||||
No sé bien que estas usando, pero una carpeta no tiene tamaño, tienes que sumar el tamaño de todos los archivos que tiene dentro. Normalmente se usa una rutina recursiva.
Para hallar el tamaño exacto de un archivo sería: Código:
var exacto : int64; begin exacto := nfilesizehigh * MAXCARDINAL + nfilesizeLow; El tamaño exacto viene dado en Bytes. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#7
|
|||
|
|||
Lepe: Probaré tu Código
No se bien a que te refieres cuando dices que no sabes bién lo que estoy usando; si te refieres al compilador utilizo Delphi 2006; si te refieres al código es tal y como lo escribí en el mensaje anterior; tengo un ShellTreeview linkado a un ShellListview y desde éste último selecciono un fichero en concreto.
Shelllistview.SelectedFolder.PathName me devuelve la ruta completa de "un" fichero, ¿No es asi?; de hecho si utilizo extractfilename(shelllistview.selectedforlder.pathname) me devuelve el nombre del fichero seleccionado; ademas si fuera como tu dices... if (hfile=invalid_handle_value) ¿no devolvería True? No obstante probaré el código que me envías (en estos momentos no tengo tiempo). ¿Podrías decirme donde encuentro una buena referencia sobre sysutils? ¿Porqué razón es necesario multiplicar nfilesizehigh por MAXCARDINAL? No se si todo esto es abusar mucho de vuestra paciencia, pero de todos modos muchas gracias. Saludos. ![]() |
![]() |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ficheros .dat y .idx | fjcg02 | Tablas planas | 11 | 29-01-2015 14:38:36 |
Uso de ficheros CSV | ramonibk | Varios | 6 | 30-12-2004 10:28:35 |
Ficheros *.dcu | neon | Varios | 1 | 24-08-2004 11:19:55 |
ficheros idx y dat | User_Baja_2 | Varios | 1 | 26-05-2004 22:00:40 |
Ficheros .dat & .idx | maro | Conexión con bases de datos | 4 | 10-02-2004 19:35:35 |
![]() |
|