ADSENSE
ADSENSE
Mostrando postagens com marcador arquivos. Mostrar todas as postagens
Mostrando postagens com marcador arquivos. Mostrar todas as postagens
terça-feira, 28 de fevereiro de 2012
Listar arquivos de diretórios
Boa Tarde .
Esta dica abaixo serve pra listar os arquivos de um determinado diretório, e seu sub diretórios.
Eu usei um ListBox pra listar os arquivos, mas fica a critério de cada um.
procedure TForm1.ListarArquivos(Diretorio: string; Sub:Boolean);
function TemAtributo(Attr, Val: Integer): Boolean;
begin
Result := Attr and Val = Val;
end;
var
F: TSearchRec;
Ret: Integer;
TempNome: string;
begin
Ret := FindFirst(Diretorio+'\*.*', faAnyFile, F);
try
while Ret = 0 do begin
if TemAtributo(F.Attr, faDirectory) then begin
if (F.Name <> '.') and (F.Name <> '..') then
if Sub = True then begin
TempNome := Diretorio+'\' + F.Name;
ListarArquivos(TempNome, True);
end;
end else begin
ListBox1.Items.Add(Diretorio+'\'+F.Name);
end;
Ret := FindNext(F);
end;
finally
FindClose(F);
end;
end;
quarta-feira, 22 de fevereiro de 2012
Função pra compactar e descompactar arquivos em delphi
Boa tarde amigos delphianos.
Estou publicando duas procedures que serve pra compactar e descompactar vários arquivos em Delphi usando a lib. zlib do próprio Delphi.
Só se deve ter o cuidado que o arquivo compactado só se consegue descompactar usando a função de descomprimir que abaixo estou publicando, isso porque a compactação é feita em modo de stream e função própria. Talvez tenha algum programa que consiga descompactar mas não foi testado.
Mas vamos as procedure.
procedure Comprimir(ArquivoCompacto: TFileName; Arquivos: array of TFileName);
var
FileInName: TFileName;
FileEntrada, FileSaida: TFileStream;
Compressor: TCompressionStream;
NumArq, I, Len, Size: Integer;
Fim: Byte;
begin
FileSaida := TFileStream.Create(ArquivoCompacto, fmCreate or fmShareExclusive);
Compressor := TCompressionStream.Create(clMax, FileSaida);
NumArq := Length(Arquivos);
Compressor.Write(NumArq, SizeOf(Integer));
try
for I := Low(Arquivos) to High(Arquivos) do begin
FileEntrada := TFileStream.Create(Arquivos[I], fmOpenRead and fmShareExclusive);
try
FileInName := ExtractFileName(Arquivos[I]);
Len := Length(FileInName);
Compressor.Write(Len, SizeOf(Integer));
Compressor.Write(FileInName[1], Len);
Size := FileEntrada.Size;
Compressor.Write(Size, SizeOf(Integer));
Compressor.CopyFrom(FileEntrada, FileEntrada.Size);
Fim := 0;
Compressor.Write(Fim, SizeOf(Byte));
finally
FileEntrada.Free;
end;
end;
finally
FreeAndNil(Compressor);
FreeAndNil(FileSaida);
end;
end;
procedure Descomprimir(ArquivoZip: TFileName; DiretorioDestino: string);
var
NomeSaida: string;
FileEntrada, FileOut: TFileStream;
Descompressor: TDecompressionStream;
NumArq, I, Len, Size: Integer;
Fim: Byte;
begin
FileEntrada := TFileStream.Create(ArquivoZip, fmOpenRead and fmShareExclusive);
Descompressor := TDecompressionStream.Create(FileEntrada);
Descompressor.Read(NumArq, SizeOf(Integer));
try
I := 0;
while I < NumArq do begin
Descompressor.Read(Len, SizeOf(Integer));
SetLength(NomeSaida, Len);
Descompressor.Read(NomeSaida[1], Len);
Descompressor.Read(Size, SizeOf(Integer));
FileOut := TFileStream.Create(
IncludeTrailingBackslash(DiretorioDestino) + NomeSaida,
fmCreate or fmShareExclusive);
try
FileOut.CopyFrom(Descompressor, Size);
finally
FileOut.Free;
end;
Descompressor.Read(Fim, SizeOf(Byte));
Inc(I);
end;
finally
FreeAndNil(Descompressor);
FreeAndNil(FileEntrada);
end;
end;
Um exemplo de uso, seria:
var
//vetor para guardar os nomes dos arquivos a ser compactados
ListaArquivos: Array of TFileName;
begin
//define o tamanho do vetor (qtde. de arquivos)
SetLength(ListaArquivos, 2);
//preenche a lista com os arquivos
ListaArquivos[0] := 'C:\Windows\Bruma.bmp';
ListaArquivos[1] := 'C:\Windows\Cafezinho.bmp';
//executa a compactação, gerando o arquivo C:\Compactado.xxx
Comprimir('C:\Compactado.xxx', ListaArquivos);
//cria um diretório de teste para descompactarmos
MkDir('C:\Descompactado');
//executa a descompactação no diretório criado
Descomprimir('C:\Compactado.xxx', 'C:\Descompactado');
end;
segunda-feira, 3 de outubro de 2011
DATA DE CRIACAO DE UM ARQUIVo
Boa Tarde.
As vezes a gente se depara com alguns problemas como saber a data de criação de um arquivo ou .exe, por isso abaixo vou colocar uma função que faz este processo pra vcs. Claro que esta função é bem simples podendo ser melhorar a gosto pessoal de cada um, mas segue a que uso normalmente em questão simples.
function TForm1.DATADECRIACAO(Arq: string): TDateTime;
var ffd:TWin32FindData;
dft :DWORD;
lft :TFileTime;
h :THandle;
begin
h:= Windows.FindFirstFile(PChar(Arq), ffd);
try
if (INVALID_HANDLE_VALUE <> h) then begin
FileTimeToLocalFileTime(ffd.ftCreationTime,lft);
FileTimeToDosDateTime(lft, LongRec(dft).Hi, LongRec(dft).Lo);
Result := FileDateToDateTime(dft);
end
finally
Windows.FindClose(h);
end;
end;
Exemplo de uso da função.
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text := DateToStr(DATADECRIACAO('C:\DATA.txt'));
end;
As vezes a gente se depara com alguns problemas como saber a data de criação de um arquivo ou .exe, por isso abaixo vou colocar uma função que faz este processo pra vcs. Claro que esta função é bem simples podendo ser melhorar a gosto pessoal de cada um, mas segue a que uso normalmente em questão simples.
function TForm1.DATADECRIACAO(Arq: string): TDateTime;
var ffd:TWin32FindData;
dft :DWORD;
lft :TFileTime;
h :THandle;
begin
h:= Windows.FindFirstFile(PChar(Arq), ffd);
try
if (INVALID_HANDLE_VALUE <> h) then begin
FileTimeToLocalFileTime(ffd.ftCreationTime,lft);
FileTimeToDosDateTime(lft, LongRec(dft).Hi, LongRec(dft).Lo);
Result := FileDateToDateTime(dft);
end
finally
Windows.FindClose(h);
end;
end;
Exemplo de uso da função.
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text := DateToStr(DATADECRIACAO('C:\DATA.txt'));
end;
Assinar:
Postagens (Atom)