Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-12-2010
McK McK is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 33
Poder: 0
McK Va por buen camino
FindClose. Error al compilar.

Hola compadres,

Tengo un problema con la instrucción FindClose. La uso para detectar archivos junto con FindFirst y FindNext, pero a la hora de cerrar el TSearchRec con FindClose Delphi me da el siguiente error al compilar:

Incompatible types: 'Cardinal' and 'TSearchRec'

El código es bien simple y en uses he añadido FileCtrl...

Código:
...
var
  FileSearch: TSearchRec;
...
begin
...
  if FindFirst(Path + 'file.txt', faAnyFile and not (faVolumeID or faDirectory), FileSearch) = 0 then
  begin
    repeat
    ....
    until FindNext(FileSearch) <> 0;
    ....
    FindClose(FileSearch);
  end;
...
Buscando en la ayuda de Delphi he encontrado que existe otra instrucción llamada FindClose y cuyo parametro es de tipo Cardinal por lo que me está tomando la sentencia como esa en vez de como un TSearchRec...

¿Que puedo hacer para que no me pase esto?

Un saludo y muchas gracias de nuevo
Responder Con Cita
  #2  
Antiguo 15-12-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Probé tu código con Delphi 7 y como esperaba funciona bién.

Te pongo el código que usé, hice algunos cambios pero no alteran la funcionalidad.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  SR: TSearchRec;
begin
  if FindFirst('C:\*.*', faAnyFile and not (faVolumeID or faDirectory), SR) = 0 then
  begin
    repeat
       Memo1.Lines.Add(SR.Name);
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

En un principio pensé que estaba tomando la función FileSearch en lugar del nombre de variable, pero no es eso...
Tu código debería funcionar ok.

Saludos.

Edito: No incluí la unit FileCtrl pero tampoco es eso.

Última edición por ecfisa fecha: 15-12-2010 a las 10:44:19.
Responder Con Cita
  #3  
Antiguo 15-12-2010
McK McK is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 33
Poder: 0
McK Va por buen camino
Ya si es super curioso... A mí también me funcionaba hasta que agregue una nueva unidad.... si buscas en la ayuda de delphi FindClose justo encima de FindClose function sale FindClose a secas y es ese el que esta usando por defecto mi programa. Me pide la variable hFindFile... en vez de una TSearchRec

los uses que utilizo en la nueva unidad son:

uses
SysUtils, Dialogs, MainFrm, Unit4, Windows, Messages, Variants, Classes, Graphics, Controls, Forms, StdCtrls, Grids, BaseGrid, AdvGrid, AdvGridExcel, ComCtrls, ExtCtrls, Spin, IniFiles, FileCtrl;

Muchas gracias por haberte molestado de todas maneras

Última edición por McK fecha: 15-12-2010 a las 12:07:53.
Responder Con Cita
  #4  
Antiguo 15-12-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola McK.

Ahora que veo como tenés el órden de inclusión de las units, me doy cuenta...

La función FindClose está definida en la unit SysUtils y tambien en la unit Windows.

En la unit Windows la función esta declarada con un parámetro de tipo Cardinal (handle) y en SysUtils con un parámetro de tipo TSearchRec.

Al estar SysUtils declarada primera, la posterior inclusión de la unit Windows superpone la función, dandote el problema.

Tenés dos formas de solucionarlo:

Cambiando el órden de inclusión.
Código Delphi [-]
uses
  Windows, SysUtils, Dialogs, ...

O calificando la función.
Código Delphi [-]
  SysUtils.FindClose(SR);


Un saludo.

Última edición por ecfisa fecha: 15-12-2010 a las 12:55:36.
Responder Con Cita
  #5  
Antiguo 15-12-2010
McK McK is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 33
Poder: 0
McK Va por buen camino
Efectivamente!!! Solucionado!!

Mil gracias ecfisa!
Responder Con Cita
  #6  
Antiguo 21-12-2010
DarkDudae DarkDudae is offline
Miembro
 
Registrado: abr 2006
Posts: 94
Poder: 19
DarkDudae Va por buen camino
Pues justo acabo de encontrarme con este problema y me ha ahorrado un buen rato de investigación.

Muchas gracias a todos.
Responder Con Cita
  #7  
Antiguo 07-06-2012
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Poder: 17
Neeruu Va por buen camino
Gracias por la Solución...
__________________
Saluda Atte Neeruu!!! :)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error en .dcu(s) al Compilar Deiv Varios 6 04-10-2006 10:28:04
Error al compilar Zuga Varios 0 31-01-2005 13:24:03
Error al compilar sharky Varios 4 04-12-2004 00:35:50
FindFirst, FindNext, FindClose DJ VMan Varios 4 17-11-2003 01:36:53
Error al compilar CFPA86 Varios 1 15-10-2003 17:52:10


La franja horaria es GMT +2. Ahora son las 07:38:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi