Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-10-2010
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Duda con FileExists

Hola!
Aver si me podéis ayudar.. tengo un FileExists(pathcheck) donde va a buscar un archivo.ico en la unidad de CD. Entonces, cuando se ejecuta esta función el sistema devuelve un error de estos habituales de: "No hay disco en la unidad. Inserte un disco en la unidad D:". Simplemente quiero que no aparezca este mensaje, ya que yo tengo el mío personalizado y no quiero que salgan dos.

Muchas gracias de antemano!

- Zaida -
Responder Con Cita
  #2  
Antiguo 26-10-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 nena_yei.

Que extaño...

Para descartar algún problema en el código, podrías hacer una prueba simple en un nuevo proyecto vacío.

Acabo de hacer esta con Delphi 7 y no produce ese comportamiento:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if FileExists('D:\PRUEBA.XYZ') then
    ShowMessage('Existe')
  else
    ShowMessage('No Existe');
end;

Si sigue dando el error, ampliá más detalles (S.O, versión Delphi, en que momento te sucede, etc).

Saludos.

Última edición por ecfisa fecha: 26-10-2010 a las 20:45:32.
Responder Con Cita
  #3  
Antiguo 26-10-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 nena_yei.

Después de unas pruebas me salió la ventanita...

Sucede cuando, una vez ejecutada la aplicación, se expulsa la unidad, y no importa si se vuelve a insertar, el error aparece por duplicado.
Supongo que Delphi realiza una captura previa a FileExists y allí se dispara la excepción.

Se puede lograr algo capturando el mensaje WM_DEVICECHANGE:
Código Delphi [-]
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
  public
  end;

var
  Form1: TForm1;
  Hay_CD: Boolean;

implementation {$R *.DFM}

procedure TForm1.WMDeviceChange(var Msg: TMessage);
begin
  inherited;
  case Msg.WParam of
    $8000: Hay_CD:= True;
    $8004: Hay_CD:= False;
  end;
end;

Ejemplo para usarlo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Hay_CD then
  begin
   if FileExists('D:\setup.exe') then
     ShowMessage('Existe')
    else
     ShowMessage('No Existe');
  end
  else
    ShowMessage('Esperando un CD...');
  //...
end;

Ese código evita la duplicación de mensajes, pero la verificación es lenta y puede aparecer 'Esperando un CD...' varias veces hasta que pasen
unos segundos.

Por ahora tal vez te saque del paso, pero seguro que alguien del foro te dará alguna propuesta mejor.

Me olvidaba, tu aplicación debe estar corriendo para detectar la expulsión o ingreso de un CD, si no: 'Esperando un CD...'

Saludos.

Última edición por ecfisa fecha: 26-10-2010 a las 22:04:49.
Responder Con Cita
  #4  
Antiguo 27-10-2010
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Gracias ecfisa, luego lo pruebo y te informo si la solución me vale por el momento. De todas maneras, si alguien tiene alguna otra solución adelante!

Un saludo
Responder Con Cita
  #5  
Antiguo 27-10-2010
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Unhappy

Lo estaba probando ahora...pero claro, si el usuario ejecuta el programa sin el CD este código no llega a saltar nunca y lo que intento es que para iniciar el programa se requiera el CD, después si lo quitan ya sería otra historia. Pero está muy bien pensado ecfisa Nadie ha conseguido hacerlo?
Responder Con Cita
  #6  
Antiguo 27-10-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 nena_yei.

Se me ocurrió algo usando la función SetErrorMode ...

Probá este código:
Código Delphi [-]
function MiFileExists(Nombre: string): boolean;
var
  Error: Word;
begin
  Error:= SetErrorMode(SEM_FailCriticalErrors);
  if FileExists(Nombre) then
    Result:= True
  else
    Result:= False;
  SetErrorMode(Error);
end;

Ejemplo de llamada:
Código Delphi [-]
    if MiFileExists('D:\RUTA\NOMBRE.EXT') then

Saludos.
Responder Con Cita
  #7  
Antiguo 27-10-2010
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Sencillamente INCREIBLE! Ecfisa no sabes el tiempo que llevo detrás de esto...estoy que no me lo creo!!! Infinitas GRACIAS, de verdad!!!!

Un saludo, Graciaaaaaaaaaaaaaas!!!!

- Zaida -
Responder Con Cita
  #8  
Antiguo 27-10-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
De nada Zaida, me alegra muchísimo haber podido ayudarte.

Saludos.
Responder Con Cita
  #9  
Antiguo 28-10-2010
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Aprovechando ya el hilo.. voy a hacer una pregunta así muy general sobre un error que me está dando unos dolores de cabeza... No puedo exponer el problema porque no sé el motivo, es decir, no es una sentencia exacta y tampoco pasa siempre, así que es como buscar una aguja en un pajar.

Me pasa que al cargar mi aplicación me sale el error de AccessViolation, peeeero..no siempre aparece y eso es lo que me trastoca. Resulta que aunque lo ejecute mil veces cuando estoy programando no hay ningún problema, pero luego cuando lo paso a cualquier otro ordenador (haciendo un cd) lo ejecuto 4 veces y no me da problemas y alomejor a la quinta sí, y luego a la séptima, pero no en todos los ordenadores me lo hace y tampoco con la misma asiduidad.
Por tanto...mi pregunta simplemente es, puede ser algo relacionado con la memoria o algo? Porque si fuera algo de código el error saltaría siempre supongo, no? El procedimiento que hace el programa al inicio es descomprimir un archivo comprimido con formato .bh creando una carpeta en el directorio con todos los archivos, y luego al cerrar la aplicación elimina esa carpeta descomprimida.

Solo abriendo y cerrando la aplicación durante varias veces (sin hacer nada dentro del programa ensí) ya me pasa esto del error, por tanto descarto que tenga que ver con otras secciones de dentro de la plataforma.

Es lo último que me queda por solucionar para tener terminada la aplicación y la verdad es que no sé por donde empezar..no sé de donde puede provenir este error aleatorio y por mucho que debugo como el error no salta nunca en entorno de pruebas pues no avanzo.

Ecfisa si supieras decirme o aconsejarme por donde podría venir el problema, o alguien que tenga alguna idea para simplemente orientarme un poquito, lo agradecería enormemente.

Gracias de antemano,

- Zaida -
Responder Con Cita
  #10  
Antiguo 28-10-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 Zaida.

Los errores de AccessViolation, muchas veces se disparan cuando utilizamos un recurso no creado o inaccesible.

Como bién comentas, es un problema difícil de ubicar...
Pero si te arroja la excepción al ejecutar el programa, sin que medie ninguna intervención tuya o del usuario, seguro que está en las acciones que realiza al iniciarse.

Si sospechas que el problema sucede cuando crea la carpeta y descomprime el archivo, yo pondría un break (Halt), después de finalizada creación y antes del borrado para ver si todo salió como debía.

También miraría si el borrado es exitoso. Revisaría además si existen referencias en otra parte del programa; al archivo borrado, campos, variables que utilicen su valor, etc.

Con lo que tengo en la mano, más no te puedo decir.
Pero estoy seguro que si esto no te ayuda, sobran en el foro compañeros con mucho más conocimiento y experiencia, que te van a dar una mano.

Si se te ocurre algún detalle más no dejes de mencionarlo.


Saludos.
Responder Con Cita
  #11  
Antiguo 28-10-2010
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Muchas gracias por la respuesta ecfisa!
De momento he comprobado que la carpeta con los archivos se elimina correctamente una vez cerrada la aplicación.
Ahora estoy jugando con el orden a la hora de hacer los CreateForm, ahora he puesto una combinación que ha disminuido mucho la aparición del error, pero al final ha vuelto a salir. Voy a ir probando un par de combinaciones más, aver si así pudiera solucionarlo, aunque lo veo difícil.
Sino, haré eso de poner el break para intentar ver donde se queda.

Gracias, iré informando
Responder Con Cita
  #12  
Antiguo 03-11-2010
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Question

Hola de nuevo!
Sigo intentando resolver el misterio! Os muestro un error que también sale al salir el AccessViolation:

Exception EReadError in module dech.exe at 00025DFB
Error reading UnBh1.ArchiveFile: Operation aborted

Y aquí os muestro el código de esta parte, que lo que hace es descomprimir el archivo lib.bh en la carpeta bd/ dentro de la carpeta donde está instalada la aplicación:

Unbh1.ArchiveFile:=ExtractFilePath(paramstr(0))+'lib.bh';
Unbh1.FileSpec.Clear;
Unbh1.FileSpec.add('*.*');
Unbh1.ExtractDir:=ExtractFilePath(paramstr(0))+'bd/';
Unbh1.extract();

Alguna sugerencia? Muchas gracias de antemano.

- Zaida -
Responder Con Cita
  #13  
Antiguo 04-11-2010
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Question

He descargado el nuevo package que hace falta para este componente de descompresión, y ahora me sale el siguiente error:

Error reading UnBh2.SeedDataKeys.Key0: Property SeedDataKeys does not exist.

Aunque no hayais utilizado este componente, supongo que es un error frecuente. Supongo que es porque antes tenía una versión antigua del package Zip Tv, y este componente (UnBh) no tenía la propiedad SeedDataKeys, que en el inspector de objetos de la izquierda ahora me aparece.

Como lo soluciono?? Help me!! Gracias de antemano!

- Zaida -
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Fallo copyfile y fileexists en servicio windows y red Ivanzinho Varios 4 13-08-2013 10:50:59
FileExists o DirectoryExists pero no solo en el actual pnikkosis OOP 2 01-12-2009 05:24:07
Duda no Try..Except Paulao Varios 7 13-08-2008 20:24:55
Fileexists sobre una red Kipow Varios 2 26-05-2006 15:57:43
Duda con ADO Ivan_25 C++ Builder 4 09-11-2005 11:02:00


La franja horaria es GMT +2. Ahora son las 06:52:39.


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