Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Buscar ficheros en la red (https://www.clubdelphi.com/foros/showthread.php?t=71452)

oscjae 20-12-2010 14:06:38

Buscar ficheros en la red
 
Buenas, he buscado esto por todas partes y no he he encotrado nada, estoy ejecutando una aplicacion que busca un fichero, utilizo FileExists, cuando el fichero que busco esta en el equipo desde el que se esta ejecutando la aplicacion va bien, el problema es cuando el fichero esta en otro equipo, y el otro equipo no tiene compartido todo el disco, ya que el protocolo netbeui necesita, si es por red, que tenga compartida la unidad o la carpeta donde se encuentra el fichero, mi pregunta es si existe alguna funcion en la que se pueda buscar ese archivo por protocolo TCPIP.

Gracias.

dalyla2010 27-12-2010 21:44:10

Yo no creo que se pueda, porque simplemente windows lo tiene bloqueado, tendrias ke hackearlo para accesarlo y por algun componente del tipo tcp/ip, supongo que su protocolo llega hasta donde windows lo permite.

oscjae 28-12-2010 09:42:22

Gracias por responder dalyla.

Mi caso es el siguiente, estoy ejecutando una aplicacion desde un terminal, una aplicacion que esta en el servidor, y en un momento determinado de la aplicacion necesito saber si existe un archivo que hay en el servidor, por si existe actualizarlo descargando otro, me las he ingeniado probando rutas, porque la ruta practicamente la tengo, porque depende de la del ejecutable, pero claro, no se cual puede ser la carpeta compartida, ya que el programa al instalarse crea un arbol de directorios, y probando probando, llego a conseguir la ruta, lo del tcpip es porque la conexion a la base de datos la hago por ese protocolo, y claro, buscar el archivo seria mucho mas facil.

Gracias por responder. :)

dalyla2010 28-12-2010 18:56:26

Mmm pero entonces piensas buscar el archivo por toda la red. Pues para mi, de entrada tiene que estar compartida la carpeta, esto quizas lo puedas hacer desde el servidor, una vez, que tengas la carpeta la compartes, y a tu aplicacion le configuras que haga la busqueda en la carpeta tal debe. Que es lo que yo he hecho. En mi caso yo creaba mi carpeta compartia la carpeta y cuando queria actualizar mi aplicacion buscaba en esa carpeta si el archivo era mas nuevo y lo actualizaba. Es algo similar, si vas a actualizar minimo tienes que saber de donde que no? Ademas perderas mucho tiempo si dejas que siempre busque por toda la red o todo el servidor. Saludos y suerte

oscjae 30-12-2010 18:24:58

En realidad no es en toda la red, creo que me he explicado mal, te pongo un ejemplo practico.

Tengo dos equipos: SERVIDOR y TERMINAL

La estructura de las carpetas en el servidor es la siguiente,

c:\carpeta1\carpeta2\Programa\Programa.exe

y el archivo que tengo que buscar esta en:

c:\carpeta1\carpeta2\carpeta3\archivo.ext

Y la base de datos esta en:

c:\carpeta1\carpeta2\basedatos\bd.fdb

Imaginate que en el servidor se comparte la carpeta "carpeta1", desde el terminal se conecta a la base de datos de la siguiente forma, por tcpip,

SERVIDOR:c:\carpeta1\carpeta2\basedatos\bd.fdb

A partir de esa ruta, por el protocolo netbeui:

//SERVIDOR/carpeta1/carpeta2/programa/programa.exe

A partir de la de tcpip y la del programa, voy probando diferentes rutas

//SERVIDOR/c/carpeta1/carpeta2/carpeta3/archivo.ext
quito de la ruta "c"
//SERVIDOR/carpeta1/carpeta2/carpeta3/archivo.ext

y de esta forma encuentro el archivo desde TERMINAL.

Supongo que es lo que tu dices, que no hay otra forma, de todas formas, si encuentro algo lo posteare.

Gracias :D

dalyla2010 30-12-2010 20:53:33

Ahh ok entonces no estas empezando de la nada, entonces no es tan complicado :P

Código:

procedure TfrmDirectorios.muestra_dir(path:string; carpetas:boolean; lista:TRzListBox);
var S:string;
    SearchRec:TsearchRec;
    Result:integer;
begin
try
  chdir(path);  //Cambia el directorio
except
  application.MessageBox('El directorio no existe o no puede ser accesado.', 'Aviso', MB_ICONINFORMATION);
end;
//FindFirst(path+'*.*', faAnyFile,SearchRec);
lista.items.Clear;
if carpetas then
  begin
  FindFirst(path+'*.*', faDirectory,SearchRec);
    Repeat
      if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') and not AnsiContainsStr(SearchRec.Name, '.') then
        lista.Items.Add(s+SearchRec.Name);
      Result:=FindNext(SearchRec);
    until result <> 0;
  end
else
  begin
  FindFirst(path+'*.*', faAnyFile,SearchRec);
  Repeat
      if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') and AnsiContainsStr(SearchRec.Name, '.') then
        lista.Items.Add(s+SearchRec.Name);
      Result:=FindNext(SearchRec);
    until result <> 0;
  end;
lista.Sorted := true;
end;

Mira yo use este codigo en delphi 7, enlisto carpetas y/o archivos, lo que tu harias en vez de enlistarlos es recorrerlos y compararlo con el nombre de archivo que buscas.

Espero esto te ayude, es solo un fragmento del codigo pero creo es lo que ocupas.


La franja horaria es GMT +2. Ahora son las 18:18:49.

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