Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   mascaras multiples con findfirst (https://www.clubdelphi.com/foros/showthread.php?t=73401)

pato89xd 19-04-2011 02:59:53

mascaras multiples con findfirst
 
hola, estoy tratando de seleccionar solo un tipo de archivos con findfirst pero no me funciona, este es el codigo, que hago mal?

Código:

procedure TForm3.FoldersData(Genero,Ruta:String);
var
  R,ima : TSearchRec;
  Busq,imagen, Dirs: Integer;
  rimagen,mask : string;
  noencontre : Boolean;
begin
 WriteLn( F, Genero );
Dirs := 0;
noencontre := True;
Busq := FindFirst(Ruta + '*.*', FaAnyfile, R);
rimagen := '';

  while Busq = 0 do
  begin
    if (R.Attr and faDirectory = faDirectory ) then
    begin
      if (R.Name <> '.') and (R.Name <> '..') then
      begin

      imagen := FindFirst(Ruta+R.Name+'\'+'*.*', FaAnyfile,ima);

  while (imagen = 0)and noencontre=True do
  begin
    if ( ima.Attr and faArchive = faArchive ) and
      ( ima.Attr and faDirectory <> faDirectory )    then
      begin

        noencontre := False;
      rimagen := Ruta+R.Name+'\'+ima.Name;

      end;
      imagen := FindNext(ima);
      end;
          FindClose(ima);
          noencontre := True;


        Inc(Dirs);
        WriteLn( F,chr(9)+R.Name+'|'+Ruta+R.Name+'\|'+rimagen);
      MusicaData(Genero,Ruta+R.Name+'\');
      rimagen := '';
      end;
    end ;
 Busq := FindNext(R);
end;


ecfisa 19-04-2011 03:21:14

Hola pato89xd.
Cita:

hola, estoy tratando de seleccionar solo un tipo de archivos
Supongo que te referís a archivos con una determinada extensión, si es así, tenés que especificarla.
Suponiendo que busques archivos .WAV seria:
Código Delphi [-]
Busq := FindFirst(Ruta + '*.WAV', FaAnyfile, R);

Pero sería más flexible pasar la extensión como un argumento de la función:
Código Delphi [-]
Busq := FindFirst(Ruta + Ext, FaAnyfile, R);

No probé el código e ignoro si la intención del argumento Genero era ese, en ese caso sería Ruta + Genero.
Un saludo.

pato89xd 19-04-2011 03:23:39

gracias, pero mas bien quiero por ejemplo filtrar archivos de imagenes con cualquier extencion de imagenes, trate de ponerle al path algo asi
Path +'*.JPEG; *.JPG; *.BMP; *.GIF'
pero no me funciona, que puedo hacer? :s

ecfisa 19-04-2011 04:13:00

Cita:

quiero por ejemplo filtrar archivos de imagenes con cualquier extencion de imagenes
Eso es muy distindo de tu primera pregunta... :)
Cita:

estoy tratando de seleccionar solo un tipo de archivos
Si querés enviarle una máscara, sería algo como:
Código Delphi [-]
procedure BuscarArchivos(Ruta, Mask: string);
var
  SR: TSearchRec;
  i: Integer;
  ts: TStrings;
begin
  ts:= TStringList.Create;
  try
    ts.Clear;
    ts.Delimiter:= ';';
    ts.DelimitedText:= Mask;
    for i:= 0 to ts.Count -1 do
    begin
      if FindFirst(Ruta + ts[i], faArchive, SR) = 0 then
      repeat
        Form1.Memo1.Lines.Add(SR.Name); 
      until FindNext(SR) <> 0;
      FindClose(SR);
    end;
  finally
    ts.Free;
  end;
end;
Para llamarlo así:
Código Delphi [-]
begin
  BuscarArchivos('C:\TEMP\', '*.zip;*.rar;*.pas;*.exe');
end;
Aviso: Es sólo un ejemplo de como implementar la busqueda con una máscara de multiples extensiones. Está probado y funciona; pero de
ninguna manera intenta reemplazar a tu código que como ya te dije, no he probado.

Un saludo.

pato89xd 19-04-2011 04:34:09

muchas gracias =D
 
muchisimas gracias, funciono a la perfeccion, ahora, abusando de tu amabilidad, como le haria para quitarle la extension a un archivo?, es decir si tengo un 'imagen.jpeg' quisiera obtener solo 'imagen'

ecfisa 19-04-2011 05:02:23

Hola.

Con la función ChangeFileExt.

Ejemplo:
Código Delphi [-]
var
  Nombre: string;
begin
   Nombre:= ChangeFileExt('AUTOEXEC.BAT','');
end;

Pero por favor la próxima vez para una nueva pregunta abrí un nuevo hilo, gracias. ;)

Un saludo.


La franja horaria es GMT +2. Ahora son las 01:56:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi