Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Buscar archivo text, sin ruta. (https://www.clubdelphi.com/foros/showthread.php?t=53614)

Caral 25-02-2008 18:56:18

Buscar archivo text, sin ruta.
 
Hola a todos
Tengo una pregunta, seguramente sencilla, pero no se como se hace.
Lo que quiero es buscar y ver un archivo text pero sin buscarlo con una ruta, osea que lo encuentre en el mismo sitio donde esta el programa.
También me gustaría que lo encontrara en un USB, osea en una de esas cosas que se usan para portar información y también sin necesidad de darle la ruta, se podrá?.
Saludos

eduarcol 25-02-2008 19:01:33

para saber la ruta donde esta el programa puedes utilizar:

ExtractFileDir(Application.ExeName);

si sabes como se llama el archivo se lo agregas y ya tienes la ruta completa, para buscarlo en unidades extraibles si no se, lo que habria es que buscar una lista de las unidades disponibles y realizar una busqueda recursiva entre los directorios...

es eso o entendi mal?

Caral 25-02-2008 19:11:21

Hola
Pues no me sale, no se como se hace lo que dices.
Un ejemplo:
Código Delphi [-]
ExtractFileDir(Application.ExeName);
Memo1.Lines.LoadFromFile('gen.text');
Por supuesto no camina, donde pongo el codigo?.
Saludos

ArdiIIa 25-02-2008 19:15:11

Y así lo encuentra ?


Código Delphi [-]
Memo1.Lines.LoadFromFile( ExtractFilePath( Application.exename) + '/gen.text');

Delphius 25-02-2008 19:16:30

Hola Carlos,

Debería usarse así:

Código Delphi [-]
TuVariable := ExtractFileDir(Application.ExeName) + 'NombreArchivo.txt';

Por el tema de buscar en discos extraíbles, hay material en los foros, ya me fijo bien... no tengo delphi a mano.

Saludos,

Caral 25-02-2008 19:27:38

Hola
Gracias a todos.
Por ahora no me funciona, he hecho esto:
No va:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
Ruta: String;
begin
  Ruta:= ExtractFileDir(Application.ExeName)+'gen.Text';
  Memo1.Lines.LoadFromFile(Ruta);
end;
Tambien esto:
No va:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
Ruta: String;
begin
  Memo1.Lines.LoadFromFile( ExtractFilePath( Application.exename) + '/gen.text');
end;
Gracias por ayudarme.
Saludos

egostar 25-02-2008 19:31:39

Amigo, yo hago esto sin ningun problema

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile('archivo.txt');
end;
Solo que debe existir el Archivo.txt en la misma ruta del programa.

Salud OS

Delphius 25-02-2008 19:43:46

¿Amigo Carlos, no será un pequeño error de dedo?
Veo que tu pones como extensión .text, mientras que nosotros .txt, ¿no habrá por allí un caracter, un espacio o un símbolo mal colocado?

Por otro lado la barra invertida debe ser así: \;)

Saludos,

Caral 25-02-2008 19:44:00

Hola
Pues tenéis razón todos, de todas las formas que me habéis dicho funciona:
El problema estaba en que ponia text y no Txt, sutil diferencia.:D
Sirve:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
Ruta: String;
begin
  Ruta:= ExtractFileDir(Application.ExeName)+'gen.Txt';
  Memo1.Lines.LoadFromFile(Ruta);
end;
Sirve:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile( ExtractFilePath( Application.exename) + 'gen.txt');
end;
Sirve:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile('gen.txt');
end;
Osea, todas las formas sirven, ahora solo me falta saber como lo hago si el archivo esta en el USB.
Gracias a todos.
Saludos

Caral 25-02-2008 19:51:23

Hola a todos
Otra pregunta.
Se puede correr o hacer correr el programa si esta en el usb?
No me traje el aparato ese y no puedo hacer la prueba, no me digáis que me estoy haciendo viejo y que voy para atrás.:D:D
Saludos

Delphius 25-02-2008 19:55:44

Por el tema del USB podes ir viendo esto:
http://www.clubdelphi.com/foros/showthread.php?t=51299
http://www.clubdelphi.com/foros/showthread.php?t=48744
http://www.clubdelphi.com/foros/showthread.php?t=34381

Si detecta la unidad podríamos hacer un ShellEsxcute().

Saludos,

Caral 25-02-2008 20:03:07

Hola
Gracias Delphius, no se como manejáis el buscador tan bien, a mi no me sale nada de eso, por suerte os tengo a vosotros.:)
Saludos

Delphius 25-02-2008 20:13:52

Cita:

Empezado por Caral (Mensaje 268509)
Hola
Gracias Delphius, no se como manejáis el buscador tan bien, a mi no me sale nada de eso, por suerte os tengo a vosotros.:)
Saludos

Y a mi me da gusto tenerte (changos! sono medio feo:D), porque en cuanto tengo problemas cuanto intento ayudar en base de datos... como que me desaparezco.

A me me ha resultado relativamente fácil encontrar del tema... recordaba que yo ya lo había consultado y además el truco para buscar mejor es escribir en idioma argentino... ese no falla:D

Saludos,

egostar 25-02-2008 20:13:57

Cita:

Empezado por Caral (Mensaje 268501)
Hola a todos
no me digáis que me estoy haciendo viejo y que voy para atrás.

Pues que te digo amigo, no te estas haciendo viejo, ya eres un viejo :D:D:D

Cita:

Empezado por Caral (Mensaje 268509)
Gracias Delphius, no se como manejáis el buscador tan bien, a mi no me sale nada de eso, por suerte os tengo a vosotros.

Pues es la virtud de la juventud, a ti ya te está correteando Alz :D:D:D

Salud OS

Caral 25-02-2008 20:35:35

Hola
Mejor no me ayudes amigo, con amigos asi, para que ........:D:D
Ah, y no menciones a mi amigo alz, que lo trato de mantener lejos:D:D
Saludos

jachguate 26-02-2008 06:42:15

Cita:

Empezado por egostar (Mensaje 268495)
Amigo, yo hago esto sin ningun problema

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile('archivo.txt');
end;
Solo que debe existir el Archivo.txt en la misma ruta del programa.

Salud OS

Eliseo, Carlos: De esta forma el archivo no debe estar en la misma ruta que el programa... es decir, no lo buscará allí (conceptualmente), sino que en el "directorio actual" de la sesión.

Si haces un acceso directo al programa, podrías cambiar la ruta de la línea "iniciar en" y buscaría el archivo allí. Pero también podrías cambiar el "directorio actual" del programa con una llamada a ChDir.

En cambio utilizando Application.ExeName siempre se tendrá la ruta del exe (útil a veces, otras no)

Por ejemplo:

Código Delphi [-]
begin
  //leerá el archivo de la ruta donde se ha iniciado el programa, 
  //que podría ser la misma del exe, pero que podría ser una indicada
  //por el usuario en el acceso directo o por el proceso que ha arrancado
  //el programa en la llamada al api
  Memo1.LoadFromFile('archivo.txt'); 
  //cambia la "carpeta actual" a c:\
  ChDir('c:\');
  //Ahora busca archivo.txt en c:\ y ya no en la carpeta de 
  //inicio del programa
  Memo1.LoadFromFile('archivo.txt'); 
  //busca archivo.txt en la misma ruta del exe
  Memo1.LoadFromFile(
    IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'archivo.txt');
end;

Les recuerdo que en windows vista, los usuarios regularmente no tienen permisos para escribir dentro de c:\archivos de programa, por lo que la práctica de leer o guardar dentro de esta ruta está cayendo en desuso, favoreciendo las carpetas de los usuarios (Application Data o Mis Documentos, según sea el caso)

Hasta luego.

;)

jachguate 26-02-2008 06:52:07

Cita:

Empezado por Caral (Mensaje 268498)
Hola
Pues tenéis razón todos, de todas las formas que me habéis dicho funciona:
El problema estaba en que ponia text y no Txt, sutil diferencia.:D
...
Osea, todas las formas sirven, ahora solo me falta saber como lo hago si el archivo esta en el USB.
Gracias a todos.
Saludos

Viendo esto... hay que tener en cuenta lo que es una ruta relativa y una ruta absoluta:

Una ruta relativa es aquella que no incluye la información completa de la ruta del archivo. El sistema (windows) determinará la ubicación del archivo en base a la "ruta actual" de la aplicación, según he explicado en mi post anterior.

Una ruta absoluta es aquella que incluye toda la información para ubicar un archivo. Es decir, incluye la letra que identifica la partición y la ruta completa dentro de esa partición para ubicarlo.

Así, de las formas enumeradas por carlos, la que usa ExtractFileDir y la que pone directamente el nombre del archivo, son rutas relativas, puesto que ExtractFileDir(Application.ExeName) devuelve la carpeta donde está el exe (quitando la letra que identifica la partición).

Esta funcionará siempre que la "ruta actual" de la aplicación esté en el mismo disco lógico que el exe. Pero si por alguna razón, la ruta actual está apuntando a otra partición, no funcionará.

Por el contrario, ExtractFilePath(Application.ExeName) devuelve la ruta completa a la carpeta donde está el exe, incluyendo la letra que identifica la partición, por lo que permite construir una ruta absoluta.

¿Me explique? :confused:

Un saludo.

;)

ixMike 26-02-2008 18:17:17

Yo me pensaba que la diferencia entre ExtractFileDir y ExtractFilePath era esta:

ExtractFileDir: C:\Archivos de programa\Mi programa
ExtractFilePath: C:\Archivos de programa\Mi programa\

¿Se ve la diferencia? La barrita al final.

En cuanto a Application.ExeName, hay otra alternativa, que es ParamStr(0); ya que el parámetro cero es el nombre del ejecutable (funciona incluso en los archivos bat escribiendo %0).


Salu2 :)

jachguate 26-02-2008 18:25:06

¡es cierto!

Bueno, hablé de memoria... y obviamente recordaba mal. xiMike, esas en lo correcto.

Hasta luego.

;)


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

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