Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   FileExists no encuentra un fichero (https://www.clubdelphi.com/foros/showthread.php?t=83562)

titooo 01-07-2013 16:25:57

FileExists no encuentra un fichero
 
Buenas señores/as, tengo una consulta relacionada con FileExists() de Delphi 7, con mi generador de reportes Rave genero un determinado listado en mi escritorio. El tema que cuando pregunto si existe el archivo (a traves de la funcion FileExists) me devuelve false, y realmente si existe y lo sobreescribe ... a que puede deberse el problema? Gracias de antemano :)

Casimiro Notevi 01-07-2013 16:29:01

A que lo busca donde no está :)

titooo 01-07-2013 16:32:54

Pero yo observo a traves de un showmessage() que ruta le estoy enviando a mi Fileexists(), y lo comparo con la ruta de el archivo existente Y es la misma :confused:

Lepe 01-07-2013 16:37:33

Una posibilidad es que tengas ocultas las extensiones de los archivos en el explorador, de forma que ves c:\mio\pepe.txt como nombre del archivo, pero en realidad existe el c:\mio\pepe.txt.txt ... revisa, porque es para tirarse de los pelos un buen rato jeje.

Pega las rutas en el foro, la que te da tu programa y la real, a ver si es algo del usuario de windows (igual te das cuenta al poner las dos rutas una debajo de la otra ;))

titooo 01-07-2013 16:39:12

jaja gracias a ambos por los aportes, nunca e habia pasado esto, por eso recurri a este hilo... uso extensiones pdf

Lepe 01-07-2013 16:54:12

A ver,

En lugar de un ShowMessage, pon un Edit en una ventana y pon la ruta al fichero ahí, en el Edit, selecciona todo el texto y lo copias, pegándolo en un explorador de windows, en la barra de direcciones, así verás si lo localiza o no.

- Puede ser que el fichero tenga una tilde, una contrabarra de más "\" o cualquier otra tontería.

titooo 01-07-2013 17:03:00

Probe y me da exactamente con el archivo

titooo 01-07-2013 17:09:52

Código Delphi [-]
procedure TForm18.Button1Click(Sender: TObject);
var
  rutavalida:boolean;
  ruta:string;
  i:integer;
begin
  rutavalida:=false;
  begin
  if edit1.Text <> ''
   then
    begin
    if copy(destino.Path, length(destino.Path)-1 ,length(destino.Path)) = '\' then
      ruta:= destino.Path + edit1.text
    else
      ruta:= destino.Path + '\' + edit1.text;
      rutavalida:=true;
    end
  else
    showmessage('Verifique Tipo de Archivo y Destino!');

  edit2.Text:=ruta;
  if fileexists(ruta)=true       {esta es la parte que consulto}
  then
      showmessage ('VA A SOBREESCRIBIR SU ARCHIVO')
  else
  begin
 if rutavalida
 then
  begin
  IF RADIOGROUP1.ItemIndex=-1
  THEN
      SHOWMESSAGE('seleccione un Tipo de Archivo')
  else
  case radiogroup1.ItemIndex of
  0:
    begin
    if edit1.Text<>''
     then
     begin
     if Lblform.Caption='LA'
     then
        begin
          form19.RvSys_aud.DefaultDest    :=rdFile;
          form19.RvProject1_aud.ProjectFile   := ExtractFilePath( Application.ExeName ) + 'Listado_auditoria.rav';
          form19.RvSys_aud.DoNativeOutput := false;
          form19.RvSys_aud.RenderObject   := form19.RvRenderPDF3;
          form19.RvSys_aud.OutputFileName := ruta + '.pdf';
          form19.RvSys_aud.SystemSetups   := form19.RvSys_aud.SystemSetups - [ssAllowSetup];
          form19.RvProject1_aud.Execute;
          form19.RvProject1_aud.Close;
         end;

Lepe 01-07-2013 17:32:50

¿que hay en "destino.path" y en "edit1.text"?

ecfisa 01-07-2013 18:12:13

Hola titooo.

Estoy viendo un error lógico que seguramente te esté ocasionando el problema.

Supongo que en esta línea queres verificar si existe el delimitador '\':
Código Delphi [-]
  if copy(destino.Path, length(destino.Path)-1 ,length(destino.Path)) = '\' then
Pero de ese modo, estas tomando los últimos 2 caracteres... Si por ejemplo destino.Path contiene 'C:\Carpeta@\' el resultado será: '@\' y la igualdad no se cumplirá nunca.

Tendría que ser:
Código Delphi [-]
  if copy(destino.Path, length(destino.Path), length(destino.Path)) = '\' then

De todos modos es mas simple hacer:
Código Delphi [-]
...
var
  FullName : string;
begin
  if edit1.Text <> '' then
  begin
    FullName  := IncludeTrailingPathDelimiter(destino.Path) + Edit1.Text;
    if FileExists(FullName) then
    ...
y no necesitas comprobación ya que la función incluye el delimitador '\' sólo si no existe al final de la cadena enviada en el argumento.

Saludos. :)

titooo 01-07-2013 18:34:43

Gracias ecfiiisaaa :) lo pruebo y comento si sirvioo :) saludos! vos siempre salvandome las papas jaja.

titooo 01-07-2013 20:17:27

No funciono :/

nlsgarcia 01-07-2013 22:56:50

titooo,

Cita:

Empezado por titooo
...yo observo a traves de un showmessage() que ruta le estoy enviando...y lo comparo con la ruta de el archivo existente y es la misma...

Pregunto:

1- ¿Puedes publicar el valor del campo Ruta empleado en la función FileExists?.

2- ¿Existe alguna regla de seguridad aplicada al archivo en cuestión que pueda influir en el problema?.

Revisa este código:
Código Delphi [-]
function SearchFile(Path, FileName : String) : Boolean;
var
  searchResult : TSearchRec;

begin

   Path := IncludeTrailingPathDelimiter(Path) + FileName;

   if FindFirst(Path, faAnyFile, searchResult) = 0 then
      Result := True
   else
      Result := False;

end;
El código anterior es una forma alterna a la función FileExists para verificar la existencia de un archivo, te sugiero probarla para ver su comportamiento con el archivo en cuestión.

Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 21:02:50.

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