11/02/2006

Monitorar arquivos gravados em Diretório

Estou criando uma aplicação, onde gravo as concersas telefonicas, com um soft ezafone, e este soft grava as conversas em um determinado diretório. Então o que eu estou precisando:
Saber se foi acrescentado algum arquivo no diretório, e pela data_hora mais antiga pegar o nome deste arquivo e gravar na base como o path para vincular a um atendimento.

A pergunta como fazer isto, qual compnente poderia usar.


Emery


Emery

Respostas

11/02/2006

Aroldo Zanela

Colega,

Depende da versão do Delphi. Verifique na paleta de componentes Samples se tem um componente denominado ShellChangeNotifier. Se não tiver, informe que te passo o código para implementar isso.


Responder Citar

11/02/2006

Emery

Uso o Delphi 7 e existe o componente que vc me indicou, mas como faria para pegar o nome do ultimo arquivo gravado no diretório e o path junto.


Emery


Responder Citar

11/02/2006

Aroldo Zanela

Colega,

Configure a propriedade NotifyFilters e no manipulador de eventos ´OnChange´ você deverá implementar uma rotina para controlar isso. Infelizmente não tenho nada pronto aqui para complementar este tópico.


Responder Citar

11/02/2006

Edilcimar

todo arquivo tem uma data e hora, basta pegar a data como a atual e fazer uma pesquisa sobre a maior hora existente, aí terá o último arquivo


Responder Citar

11/02/2006

Aroldo Zanela

Colega,

Para obter a lista dos arquivos desejados de uma determinada pasta:

function ListFiles(const Dir, Wildcard: string; const List: TStrings): Boolean;
var FileSpec: string;
    SR: TSearchRec;
    Success: Integer;
begin
   Assert(Assigned(List));
   Result := DirectoryExists(Dir);
   if not Result then
     Exit;
   FileSpec := Dir+´\´;
   if Wildcard = ´´ then
     FileSpec := FileSpec + ´*.*´
   else
     FileSpec := FileSpec + Wildcard;
   Success := FindFirst(FileSpec, faAnyFile, SR);
   try
     while Success = 0 do
     begin
       if (SR.Name <> ´.´) and (SR.Name <> ´..´)
         and (SR.Attr and faVolumeId = 0) then
         List.Add(Dir+´\´+ SR.Name);
       Success := FindNext(SR);
     end;
   finally
     FindClose(SR);
   end;
end;


Para pegar o arquivo mais novo:

var List: TStringList;
I, N: Integer;
    MostRecentFile: string;
    MostRecentDate: TDateTime;
begin
  List := TStringList.Create;
if ListFiles(´C:\TEMP´,´*.*´,List ) then
  begin
    N := List.Count-1;
    for I := 0 to N do
    begin
      if FileDateToDateTime(FileAge(List.Strings[I&93;))>MostRecentDate then
      begin
        MostRecentDate := FileDateToDateTime(FileAge(List.Strings&91;I&93;));
        MostRecentFile:= List.Strings&91;I&93;;
      end;
    end;
    ShowMessage(MostRecentFile);
  end;
end;


Deve ter um jeito mais fácil, mas fiz da forma que me lembrei no momento.


Responder Citar

20/02/2006

Emery

valeu ! obrigado


Responder Citar

06/03/2006

Macario

Opa bom dia colegas.


Como faço para o ShellChangeNotifier notificar em tempo real?
Ele so me mostra a mensagem se eu voltar a aplicação de exemplo que criei.

Estou querendo criar uma serviço que ao identificar qualquer alteração em um determinado diretorio, ele peça ao usuário para enviiar um email.

A parte do email eu sei fazer ja pra por isso em serviço é que estou me perdendo.

Qualquer indicação ou exemplo é de grande ajuda.


Um abraço. 8) :arrow:


Responder Citar

07/03/2006

Macario

Up :!:


Não teria algum outro componente?

grato.


Responder Citar

08/03/2006

Macario

UP :!: :arrow: :idea:


Responder Citar