Array
(
)

Monitorar arquivos gravados em Diretório

Emery
   - 11 fev 2006

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


Aroldo Zanela
   - 11 fev 2006

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.


Emery
   - 11 fev 2006

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


Aroldo Zanela
   - 11 fev 2006

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.


Edilcimar
   - 11 fev 2006

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


Aroldo Zanela
   - 11 fev 2006

Colega,

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

#Código


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:

#Código

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]))>MostRecentDate then
begin
MostRecentDate := FileDateToDateTime(FileAge(List.Strings[I]));
MostRecentFile:= List.Strings[I];
end;
end;
ShowMessage(MostRecentFile);
end;
end;


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


Emery
   - 20 fev 2006

valeu ! obrigado


Macario
   - 06 mar 2006

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:


Macario
   - 07 mar 2006

Up :!:


Não teria algum outro componente?

grato.


Macario
   - 08 mar 2006

UP :!: :arrow: :idea: