Jump to content
passarito

Mudar Data/Hora de um ou mais ficheiros

Recommended Posts

passarito

Olá todos,

Ontem deparei-me com um problema que já me tinha ocorrido a espaços anteriormente. Queria alterar a data de vários (muitos) ficheiros.

Posso dizer que andei a tirar fotos com duas máquinas e queria ordenar as imagens por data/hora, só que uma das máquinas tinha a data trocada, o dia no lugar do mês e vice-versa.

Dei uma olhada na net, assim por alto, mas o que encontrei foi algo que alterava ano, mês, dia horas, minutos e segundos. Tudo igual para todos os ficheiros!

Ora, e se eu quiser alterar só o dia e deixar tudo o resto intacto? ou só os minutos? Ou só a data?

Bom, acho que já viram onde quero chegar...

Assim, ontem à noite meti mãos à obra e desenvolvi um mini-programa para fazer este trabalhinho que às vezes me assalta. E porque pode interessar a mais alguém fica aqui o programa que também pode servir a nível didáctico para quem não souber trabalhar com estas funções e procedimentos menos vulgares.

Program Altera_Data_Hora_Ficheiros;

Uses CRT, DOS;

Var
F: File;
FTime: Longint;
DirInfo: SearchRec;         { For Windows, use TSearchRec }
File_DT, DT2CHG: DateTime;
bFile_DT:array[1..6] of Boolean;
i: integer;


Procedure Ajuda;
begin
  Writeln;
  Writeln('Programa: CHG_DT.EXE  -  7/Maio/2012  -  @Pedro Estima');
  Writeln('Permite alterar a data e/ou hora de ficheiro(s) e directoria(s)');
  Writeln;
  Writeln('CHG_DT [Ficheiro]');
  Writeln('CHG_DT [WildCards]');
  Writeln;
end;




Procedure Inicializa;


  Function Valor(opcao:string):word;
  const esc=#27;
  var
    op:char;
    v:word;

  begin
    Write('Deseja alterar ',opcao,' [s/N]: ');
    repeat
      op:=upcase(readkey);
    until op in [esc,'N','S'];
    if op=esc then halt;
    write(op);
    if op='S' then begin
      bFile_DT[i]:=True;
      write('   Insira valor para ',opcao,': ');
      readln(v);
      valor:=v;
    end
    else begin
      bFile_DT[i]:=False;
      valor:=0;
      writeln;
    end;
    i:=i+1;
  end;


begin
  Writeln;
  i:=1;
  DT2CHG.Year:=Valor('Ano');
  DT2CHG.Month:=Valor('Mes');
  DT2CHG.Day:=Valor('Dia');
  DT2CHG.Hour:=Valor('Hora');
  DT2CHG.Min:=Valor('Minutos');
  DT2CHG.Sec:=Valor('Segundos');
end; {Fim Inicializa}



begin
  if ParamCount=0 then Ajuda
  else begin
    Inicializa;
    FindFirst(paramstr(1), AnyFile, DirInfo);
    while DosError = 0 do begin
      Write('Ficheiro: ',DirInfo.Name);
      Assign(f, DirInfo.Name);
      reset(f);
      GetFTime(f,ftime);
      UnpackTime(FTime,File_DT);
      if bFile_DT[1] then File_DT.Year:=DT2CHG.Year;
      if bFile_DT[2] then File_DT.Month:=DT2CHG.Month;
      if bFile_DT[3] then File_DT.Day:=DT2CHG.Day;
      if bFile_DT[4] then File_DT.Hour:=DT2CHG.Hour;
      if bFile_DT[5] then File_DT.Min:=DT2CHG.Min;
      if bFile_DT[6] then File_DT.Sec:=DT2CHG.Sec;
      PackTime(File_DT,FTime);
      SetFtime(f,ftime);
      gotoxy(wherex+5,wherey);
      writeln('OK');
      close(f);
      FindNext(DirInfo);
    end;
  end;
end.

Estejam à vontade para comentar, melhorar, etc.

Share this post


Link to post
Share on other sites
nunopicado

Duvida: Não seria melhor alterares os dados EXIF, e não a data/hora do ficheiro?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
nunopicado

Tópico dividido:

O desafio do membro Pedro-Kun de criar um programa para editar a data via EXIF continua aqui:

Mudar Data/Hora de captura de uma foto (EXIF)


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
nunopicado

Seja como for, acho que está aqui um excelente snippet - na Wiki

Sim, não houve demérito do passarito. Para o efeito a que ele se propôs, está impecável.

A ideia do EXIF foi só mesmo por se tratar de imagens/fotografias (pois é, fotógrafo na área :):D :D).


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
passarito
Sim, não houve demérito do passarito. Para o efeito a que ele se propôs, está impecável.

@Nunopicado, não quero "puxar a brasa à minha sardinha", mas o meu objectivo não eram as fotos propriamente distas, mas sim qualquer ficheiro. Apenas dei o exemplo das fotos porque foi o caso concreto! Ainda ssim vou acompanhar esse desafio!

Não sei o que aconteceu, mas a minha resposta foi parar ao outro tópico... ainda assim transcrevo-a para aqui:

Nem conhecia essa especificação EXIF, já andei a ler qualquer coisa, mas nada em concreto. No fim-de-semana dedicar-me-ei a esse assunto com  máquina. Penso que isso será na máquina que isso é configurado, não?

No entanto, para a finalidade que eu queria resultou. É simplesmente alterar data/hora do ficheiro, quer em imagem, como outro qualquer! Até de pastas ele altera! Quis foi aprimorar o programa um pouco mais :)

Já dei uma olhada melhor a esse EXIF, e já sei do que estão a falar!  :cheesygrin:

Share this post


Link to post
Share on other sites
nunopicado

@Nunopicado, não quero "puxar a brasa à minha sardinha", mas o meu objectivo não eram as fotos propriamente distas, mas sim qualquer ficheiro. Apenas dei o exemplo das fotos porque foi o caso concreto! Ainda ssim vou acompanhar esse desafio!

Fica à vontade, puxa a brasa para a tua sardinha... Pessoalmente prefiro umas costeletas de novilho! :):D


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
thoga31

Não sei o que aconteceu, mas a minha resposta foi parar ao outro tópico...

Aconteceu isto...

Tópico dividido:

O desafio do membro Pedro-Kun de criar um programa para editar a data via EXIF continua aqui:

Mudar Data/Hora de captura de uma foto (EXIF)

... e a tua mensagem foi atrás da sardinha. ;)


Knowledge is free!

Share this post


Link to post
Share on other sites
nunopicado

... e a tua mensagem foi atrás da sardinha. :D

:D

Acho que foi ver se encontrava as costeletas... hehehe Eu pelo menos já as encontrei e estão muito boas!

Estão servidos? Não? Porquê?  ;)


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.