PDA

Ver la Versión Completa : FileExists no encuentra un fichero


titooo
01-07-2013, 16:25:57
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
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 '\':

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:

if copy(destino.Path, length(destino.Path), length(destino.Path)) = '\' then


De todos modos es mas simple hacer:

...
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,


...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:

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.