Ir al contenido


Foto

Saber si una carpeta está vacía


  • Por favor identifícate para responder
9 respuestas en este tema

#1 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 18 junio 2010 - 08:49

Buenas,

No se si se ha publicado ya, pero aquí os dejo cómo saber si una carpeta está vacía
 

delphi
  1. function IsDirEmpty(const Dir: string): Boolean;
  2. var
  3.   F: TSearchRec;
  4. begin
  5.   Result := (FindFirst(Dir + '\*.*', faAnyFile, F) = 0) and
  6.             (FindNext(F) = 0) and
  7.             (FindNext(F) <> 0);
  8.   FindClose(F);
  9. end;


Ya que estoy por estos lares.... ¿Se ha implementado algo para poder introducir FAQs? La verdad es que estaría bien que muchos de estos trucos se pusieran ahí para tenerlo todo bien localizado y catalogado :)

Nos leemos
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 18 junio 2010 - 09:02

Muy interesante forma de combinar funciones y retornar una consulta :) (y)

Aún no hemos trabajado con los FAQ's, y si, estos trucos estarán en los FAQ's.

Un gusto verte por aquí Xavier.

Salud OS
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 18 junio 2010 - 09:05

He estado trabajando en el asunto de Introducir FAQ's e incluso en algunas mejoras de presentación, sólo que he tenido mucho inconvenientes con mi máquina, internet y energía eléctrica desde hace tiempo :( que espero resolver pronto.

Saludos.
  • 0

#4 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 18 junio 2010 - 12:33

Un placer verte por aqui.
  • 0

#5 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 17 diciembre 2015 - 10:08

Muchas gracias por el código muy amable, mas cuando lo intento usar en lazarus se queda en el siguiente error:


php
  1.   Result := (FindFirst(Dir + &'\*.*&', faAnyFile, F) = 0) and     // exactamente entre el primer & y #

y la ventana de mensajes dice:


php
  1. unit1.pas(39,31) Fatal: Syntax error, ")" expected but "const char" found

Si me pudieran dar una manito con el código, de momento estoy usando este que me funciona:


php
  1. function IsDirectoryEmpty(const directory : string) : boolean;
  2.  var
  3.    searchRec :TSearchRec;
  4.  begin
  5.    try
  6.     result := (FindFirst(directory+'\*.*', faAnyFile, searchRec) = 0) AND
  7.               (FindNext(searchRec) = 0) AND
  8.               (FindNext(searchRec) <> 0) ;
  9.    finally
  10.      FindClose(searchRec) ;
  11.    end;
  12.  end;

Su uso es así:


php
  1. if IsDirectoryEmpty('F:\casita') then    // TAMBIEN PUEDE IR  'F:\casita\'
  2.   BEGIN
  3.   ShowMessage('esta vacio')
  4.   END;
  5.   else
  6.   Begin
  7.   ShowMessage('no esta vacio');
  8.   end;

Me gustaría tener dos formas para saber si un directorio está vació o no por eso les pido su ayuda, gracias.  :) :)


  • 0

#6 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 17 diciembre 2015 - 07:21

Muchas gracias por el código muy amable, mas cuando lo intento usar en lazarus se queda en el siguiente error:


delphi
  1.   Result := (FindFirst(Dir + &'\*.*&', faAnyFile, F) = 0) and     // exactamente entre el primer & y #


Es un error en el foro, ya tienes editado el truco.

Saludos.
  • 0

#7 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 17 diciembre 2015 - 07:24

Aprovecho para dar otra solución al problema con la API PathIsDirectoryEmpty


delphi
  1. function PathIsDirectoryEmptyA(Path: PCHAR): BOOL; stdcall; external 'Shlwapi.dll';
  2. var
  3. B: boolean;
  4. begin
  5. B:= PathIsDirectoryEmptyA('C:\prueba');
  6. end;

Saludos.
  • 1

#8 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 18 diciembre 2015 - 08:07

Muchas gracias amigo escafranda, ahora si me funciona la 1ra función, pero aún no logro hacer funcionar la última que compartió, imagino que primero se tiene que declarar o algo así, lo que siempre suelo hacer es poner las funciones después de:


php
  1. {$R *.lfm}
  2.  
  3. { TForm1 }

por ejemplo su última función que me compartió lo puse así:


php
  1. implementation
  2.  
  3. {$R *.lfm}
  4.  
  5. { TForm1 }
  6.  
  7. function PathIsDirectoryEmptyA(Path: PCHAR): BOOL; stdcall; external 'Shlwapi.dll';
  8. var
  9.   B: boolean;
  10. begin
  11.   B:= PathIsDirectoryEmptyA('C:\prueba');

y me salta este error:


php
  1. Compilar proyecto, Objetivo: project1.exe: Código de salida 1, Errores: 2
  2. unit1.pas(32,46) Error: Identifier not found "BOOL"
  3. unit1.pas(37,4) Fatal: Syntax error, "." expected but ";" found

Lo más seguro es que algo estoy haciendo mal... seguiré probando.

 


  • 0

#9 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 18 diciembre 2015 - 08:18

Estuve revisando un código antiguo que hize hace un tiempo, en el cual anote la forma de llamar a una DLL, lo he  implementado así:


php
  1. var
  2.   Form1: TForm1;
  3.  
  4. implementation
  5. function PathIsDirectoryEmptyA(Path: PCHAR): BOOLean; stdcall; external 'Shlwapi.dll';    // aca me saltaba error con BOOL así que probe con boolen y de momento funciona.
  6.  
  7. {$R *.lfm}
  8.  
  9. { TForm1 }
  10.  
  11. procedure TForm1.Button1Click(Sender: TObject);
  12. var
  13.   B: boolean;
  14. begin
  15.   B:= PathIsDirectoryEmptyA('f:\casita');
  16.   if b then ShowMessage('esta vacio') else ShowMessage('NO esta vacio');   // Funciona

Ahora si me funciona :) , pero deseo que me corrijan por si algo no esta bien, Gracias.


  • 0

#10 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 18 diciembre 2015 - 01:10

BOOL es un tipo de Windows, para usarlo debes incluir esa unit. Es preferible esto a cambiar los tipos por los propios de delphi o Lazarus, y dado que trabajamos con API de Windows, el códico será incompatible con otras plataformas.


Saludos.
  • 0




IP.Board spam blocked by CleanTalk.