Ir para o conteúdo

Monitor De Arquivos


Criado por Raficcha, Ago 26 2011 10:38

Não há respostas para este tópico
  • Por favor, faça o login para responder

#1 Raficcha

Raficcha
  • Raficcha
  • Colaborador
  • 2 Revisões

Revisou 26 agosto 2011 - 10:38

Esta vendo uns códigos antigos que tinha feito em delphi e acabei encontrando este que acho legal compartilhar. Ele não tem a melhor forma de programação e pode ter alguns erros de ortografia, mas vale a pena ver.

Este componente pode ser adicionado ao delphi ou utilizado dinamicamente. Serve para informar quando um arquivo é alterado.

unit FileMonitor;

interface

uses
  SysUtils, Classes, StdCtrls, ExtCtrls;

type
  TFileMonitorFile = record
  	arquivo : string;
    data_alteracao: integer;
  end;

  TAlterFileProcedure = procedure(FileName: string) of object;

  TFileMonitor = class(TComponent)
  private
    { Private declarations }
    FIntervalo: integer;
    FOnAlterFile: TAlterFileProcedure;
    FOnDestroy : TNotifyEvent;
    FOnCreate: TNotifyEvent;
    FOnVerify: TNotifyEvent;
    TimerMonitor: TTimer;
    FilesArray : array of TFileMonitorFile;
    procedure TimerMonitosOnTimer(Sender: TObject);
  protected
    { Protected declarations }
  public
    { Public declarations }
	constructor Create(AOwner: TComponent); override;
    Destructor destroy;
 //   procedure start;
  published
	FFiles: TStringList;
    { Published declarations }
   // property FilesMonitoring: TStringList read FFiles write FFiles;
   property IntervalVerify: integer read Fintervalo write Fintervalo default 1000;
    property onAlterFile: TAlterFileProcedure read FOnAlterFile write FOnAlterFile;
    property onDestroy : TNotifyEvent read FOnDestroy write FOnDestroy;
    property onCreate: TNotifyEvent read FOnCreate write FOnCreate;
    property onVerify: TNotifyEvent read FOnVerify write FOnVerify;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('ROBJ', [TFileMonitor]);
end;

{ TFileMonitor }



constructor TFileMonitor.Create(AOwner: TComponent);
begin
  inherited;
  	Self.FIntervalo := 1000;
  	Self.FFiles := TStringList.Create;
    SetLength(Self.FilesArray, 1);
  	Self.TimerMonitor := TTimer.Create(nil);
    Self.TimerMonitor.OnTimer := Self.TimerMonitosOnTimer;
  //  Self.TimerMonitor.Enabled := false;
  if (@Self.FOnCreate <> nil) then
  	Self.FOnCreate(Self);
end;

destructor TFileMonitor.destroy;
begin
    Self.TimerMonitor.Enabled := false;
    Self.TimerMonitor.Destroy;
    Self.FFiles.Destroy;
    if (@Self.FOnDestroy <> nil) then
    	Self.FOnDestroy(Self);
end;

{procedure TFileMonitor.start;
begin
	Self.TimerMonitor.Enabled := true;
end;}

procedure TFileMonitor.TimerMonitosOnTimer(Sender: TObject);
var
	cont, cont2 : integer;
    encontrado : boolean;
begin
	Self.TimerMonitor.Interval := Self.FIntervalo;
	for cont := 0 to Self.FFiles.Count-1 do
    begin
    	//percore a lista de arquivos e percore o array em busca do arquivo
        encontrado := false;
        for cont2 := 1 to length(Self.FilesArray)-1 do
        begin
        	if (FilesArray[cont2].arquivo = Self.FFiles[cont]) then
            begin
            	encontrado := true;
                //verificar se o arquivo foi alterado
                	if (FileAge(FilesArray[cont2].arquivo) <> FilesArray[cont2].data_alteracao) then
                    begin
                		//atualizar a data
                        FilesArray[cont2].data_alteracao := FileAge(FilesArray[cont2].arquivo);
                    	//chamar o evento
                        if (@Self.FOnAlterFile <> nil) then
                            Self.FOnAlterFile(FilesArray[cont2].arquivo);
                    end;
                //parar o loop
                break;
            end;
        end;
        //verificar se foi encontrado, senão, adicionar à lista
        if (encontrado = false) then
        begin
        	SetLength(Self.FilesArray, length(Self.FilesArray)+1);
            Self.FilesArray[Length(Self.FilesArray)-1].arquivo := Self.FFiles[cont];
            Self.FilesArray[Length(Self.FilesArray)-1].data_alteracao := FileAge(Self.FFiles[cont]);
        end;
    end;

    if (@Self.FOnVerify <> nil) then
    	Self.FOnVerify(Self);
end;

end.
 





1 usuário(s) está(ão) lendo este código

1 membro(s), 0 visitante(s) e 0 membros anônimo(s)