Ir para conteúdo
Fórum Script Brasil
  • 0

Alterar Propriedades De Arquivos.


schaukoski

Pergunta

Olá muito boa tarde.

Pessoal estou com algumas duvidas para fazer o seguinte:

eu tenho em minha tela um DirectoryListBox1, e um FileListBox1 ligado à ele.

O que eu estou tentando fazer é, ao clickar em meu button, eu alterar as propriedades do arquivo selecionado no FileListBox1.

Eu Queria saber os comandos para alterar mas eu já procurei e não acho, achei FileExists('c:\meusdocumentos\arquivo.doc');, e

DeleteFile('c:\arquivo.doc'); mas não axei para alterar as datas

eu procuro por alterar datas de:

(aquelas datas que aparecem nos arquivos nas propriedades)

Criado em:

Modificado em:

Acessado em:

essas datas que eu estou tentando alterar via delphi...

Abraço!!!

Obrigado .. até mais!

Editado por schaukoski
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
Guest --HDELPHI --
Olá muito boa tarde.

Pessoal estou com algumas duvidas para fazer o seguinte:

eu tenho em minha tela um DirectoryListBox1, e um FileListBox1 ligado à ele.

O que eu estou tentando fazer é, ao clickar em meu button, eu alterar as propriedades do arquivo selecionado no FileListBox1.

Eu Queria saber os comandos para alterar mas eu já procurei e não acho, achei FileExists('c:\meusdocumentos\arquivo.doc');, e

DeleteFile('c:\arquivo.doc'); mas não axei para alterar as datas

eu procuro por alterar datas de:

(aquelas datas que aparecem nos arquivos nas propriedades)

Criado em:

Modificado em:

Acessado em:

essas datas que eu estou tentando alterar via delphi...

Abraço!!!

Obrigado .. até mais!

Colega ai vai uma dica: Função para verificar as propriedades de um arquivo

Voce pode modificar para obter outras informações do arquivo... ok ?

function TForm1.VerificaPropriedadeArquivo(Arquivo,Propriedade: String): String;
const
  InfoNum           = 10;
  InfoStr           : Array[1..InfoNum] of String =
    ('CompanyName', 'FileDescription', 'FileVersion', 'InternalName',
    'LegalCopyright', 'LegalTradeMarks', 'OriginalFilename',
    'ProductName', 'ProductVersion', 'Comments');
var
  fCompanyName      : String;
  fFileDescription  : String;
  fFileVersion      : String;
  fInternalName     : String;
  fLegalCopyright   : String;
  fLegalTradeMark   : String;
  fOriginalFileName : String;
  fProductName      : String;
  fProductVersion   : String;
  fComments         : String;
  S                 : String;
  Len               : Cardinal;
  n                 : Cardinal;
  Buf               : PChar;
  Value             : PChar;
begin
  S := Arquivo;
  n := GetFileVersionInfoSize(PChar(S), n);
  if n > 0 then begin
     Buf := AllocMem(n);
     try
       GetFileVersionInfo(PChar(S), 0, n, Buf);
       if VerQueryValue(Buf, PChar('StringFileInfo41604E4\' +
         InfoStr[1]), Pointer(Value), Len) then
         fCompanyName := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo41604E4\' +
         InfoStr[2]), Pointer(Value), Len) then
         fFileDescription := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo41604E4\' +
         InfoStr[3]), Pointer(Value), Len) then
         fFileVersion := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo41604E4\' +
         InfoStr[4]), Pointer(Value), Len) then
         fInternalName := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo41604E4\' +
         InfoStr[5]), Pointer(Value), Len) then
         fLegalCopyright := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo41604E4\' +
         InfoStr[6]), Pointer(Value), Len) then
         fLegalTradeMark := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo41604E4\' +
         InfoStr[7]), Pointer(Value), Len) then
         fOriginalFileName := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo41604E4\' +
         InfoStr[8]), Pointer(Value), Len) then
         fProductName := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo41604E4\' +
         InfoStr[9]), Pointer(Value), Len) then
         fProductVersion := Value;
       if VerQueryValue(Buf, PChar('StringFileInfo41604E4\' +
         InfoStr[10]), Pointer(Value), Len) then
         fComments := Value;
     finally
       FreeMem(Buf, n);
     end;
  end
  else begin
      fCompanyName := '';
      fFileDescription := '';
      fFileVersion := '';
      fInternalName := '';
      fLegalCopyright := '';
      fLegalTradeMark := '';
      fOriginalFileName := '';
      fProductName := '';
      fProductVersion := '';
      fComments := '';
  end;
  result := '?????';
  if Propriedade = 'CompanyName' then result := fCompanyName;
  if Propriedade = 'FileDescription' then result := fFileDescription;
  if Propriedade = 'FileVersion' then result := fFileVersion;
  if Propriedade = 'InternalName' then result := fInternalName;
  if Propriedade = 'LegalCopyright' then result := fLegalCopyright;
  if Propriedade = 'LegalTradeMarks' then result := fLegalTradeMark;
  if Propriedade = 'OriginalFilename' then result := fOriginalFileName;
  if Propriedade = 'ProductName' then result := fProductName;
  if Propriedade = 'ProductVersion' then result := fProductVersion;
  if Propriedade = 'Comments' then result := fComments;
end;

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --HDELPHI --
Obrigado pela resposta.

então cara, eu não intendi muito bem não.

essa rotina ele meio que "descobre" a propriedade e salva? mas e alterá-la?

eu axei um pouco confuso, será que não existe uma maneira mais fácil de fazer isso?

Voce não pode alterar propriedades mas pode alterar atributos que são coisas bem diferentes.

por exemplo se você quiser alterar o atributo de somente para leitura de um arquivo:

var Attrib: integer;
begin
  Attrib:=FileGetAttr('C:\ARQUIVO.XYZ');
  if Attrib<>-1 then
  begin
    Attrib:=Attrib and not faReadOnly;
    if FileSetAttr('C:\ARQUIVO.XYZ', Attrib)=0 then
      Alteração Efetuada
    else Windows code error;
  end;
end;

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --HDELPHI --

Exibindo as propriedades do arquivo

A dica abaixo apresenta o código de implementação para exibir na tela uma janela padrão Windows de propriedades do arquivo.

Para implementar este procedimento é necessário acrescentar a unit ShellAPI.As propriedades do arquivo são armazenadas numa estrutura chamada TShellExecuteInfo, que corresponde a um registro com os campos: tamanho do arquivo (cbSize), atributos (fMask), nome (lpFile) , shell (lpVerb) e modo de apresentação da janela (nShow).O primeiro passo do procedimento é zerar todas a propriedades da Shell ( FillChar(S,SizeOf(S),0) ), segundo passo é atualizar estas propriedades (With S do ) em relação ao arquivo indicado (Arq :String) e o terceiro passo é abrir a janela de propriedades com os valores atualizados (ShellExecuteEx(@S)).

Código Completo: Uma outra maneira mais simplificada

Procedure Propriedades(Arq:String);
Var
s:TShellExecuteInfo;
Begin 
FillChar(S,SizeOf(S),0); 
With S do Begin 
cbSize := SizeOf(S); 
fMask := SEE_MASK_FLAG_NO_UI or SEE_MASK_INVOKEIDLIST or SEE_MASK_NOCLOSEPROCESS;
wnd := Handle; 
lpVerb := 'properties'; 
lpFile := Pchar(Arq); 
nShow := sw_ShowNormal; 
End; 
ShellExecuteEx(@S);
End;

Link para o comentário
Compartilhar em outros sites

  • 0

Então cara.. eu axei aqui uma rotina para exibir exatamente o que eu precisava:

var
SearchFile: TSearchRec;
lpSystemTime: TSystemTime;
begin
{ arquivo }
FindFirst(FileListBox1.FileName,faAnyFile,SearchFile);
try
{ Criação }
FileTimeToSystemTime
(SearchFile.FindData.ftCreationTime,lpSystemTime);
Edit1.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Modificado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastWriteTime,lpSystemTime);
Edit2.text:=DateTimeToStr
(SystemTimeToDateTime(lpSystemTime));
{ Acessado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastAccessTime,lpSystemTime);
Edit3.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
finally
FindClose(SearchFile);
end;

eu so consigo mostrar as datas, mas.. voce disse então que não tem como alterar?, não existe essa possibilidade?

obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --HDELPHI --
Então cara.. eu axei aqui uma rotina para exibir exatamente o que eu precisava:

var
SearchFile: TSearchRec;
lpSystemTime: TSystemTime;
begin
{ arquivo }
FindFirst(FileListBox1.FileName,faAnyFile,SearchFile);
try
{ Criação }
FileTimeToSystemTime
(SearchFile.FindData.ftCreationTime,lpSystemTime);
Edit1.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Modificado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastWriteTime,lpSystemTime);
Edit2.text:=DateTimeToStr
(SystemTimeToDateTime(lpSystemTime));
{ Acessado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastAccessTime,lpSystemTime);
Edit3.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
finally
FindClose(SearchFile);
end;

eu so consigo mostrar as datas, mas.. voce disse então que não tem como alterar?, não existe essa possibilidade?

obrigado

Voce pode alterar datas sim, basta mudar a data do seu micro, editar o arquivo e salva-lo ; ele ficara mostrando a data em que foi salvo .... ok ?

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --HDELPHI --
é isso seria manualmente.

mas digo.. tem como eu fazer isso através do delphi?

a data que eu estaria alterando desta forma seria a de modificação.. mas e a de criação? não tem como alterá-la de forma alguma?

valeu!

voce pode construir no delphi uma rotina para isto, o procedimento é aquele ...mudar a data, abrir o arquivo em questão e salva-lo novamente.

Link para o comentário
Compartilhar em outros sites

  • 0
Olá muito boa tarde.

Pessoal estou com algumas duvidas para fazer o seguinte:

eu tenho em minha tela um DirectoryListBox1, e um FileListBox1 ligado à ele.

O que eu estou tentando fazer é, ao clickar em meu button, eu alterar as propriedades do arquivo selecionado no FileListBox1.

Eu Queria saber os comandos para alterar mas eu já procurei e não acho, achei FileExists('c:\meusdocumentos\arquivo.doc');, e

DeleteFile('c:\arquivo.doc'); mas não axei para alterar as datas

eu procuro por alterar datas de:

(aquelas datas que aparecem nos arquivos nas propriedades)

Criado em:

Modificado em:

Acessado em:

Existe uma uma função da API Win32 para isso sim: SetFileTime

Eu dei uma pesquisada e, a princípio, não encontrei nada que fizesse tudo em uma única função, então criei uma e coloquei na sessão Tutoriais & Dicas (ver tópico) para que outros possam facilmente encontrá-la.

Usei como ponto de partida esta função na página do Torry's - link ref.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...