O que você usa quando deseja atualizar o campo de data de modificação de um arquivo no Windows?
- comandos acessível via C ++, .NET, C # ou algo nativo para o Windows (Vista preferencialmente)
- ferramentas / aplicações de preferência livre e, se possível, fonte aberta também
Editar:
já existe uma página para aplicativos como apontado por CheapScotsman Aqui.
Se alguém souber como posso fazer isso via C ++, C #, WSH ou algo similar, bom e bom, senão eu acho que todo o resto é coberto na questão ligada.
Se você quiser tocar o carimbo de data de um arquivo usando o windows, use o seguinte comando no prompt de comando:
copy /b filename.ext +,,
(Onde filename.ext
é o nome do seu arquivo). o +,,
é uma bandeira especial para copy
dizendo para simplesmente atualizar a data / hora no arquivo:
* Alterar a hora e a data de um arquivo
Se você quiser atribuir a hora e a data atuais a um arquivo sem modificar o arquivo, use a seguinte sintaxe:
copy /b Source+,,
As vírgulas indicam a omissão do parâmetro Destination.
Edite com base nos comentários de Lumi e Justin: Coloque isso em um arquivo de lote, por exemplo. touch.cmd
@COPY /B %1+,, %1
Isso funciona mesmo se o arquivo não estiver no diretório atual (testado no Windows 7).
Eu usei e recomendo unxutils que são portas nativas do Win32 de muitos utilitários comuns do Unix. Existe um touch
comando lá dentro.
Se tudo que você quer é mudar a data da última modificação do arquivo (que foi o meu caso):
C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
type nul >>file & copy file +,,
- Cria
file
se não existir.
- Deixa o conteúdo do arquivo sozinho.
- Apenas usa
cmd
built-ins.
- Ambos último acesso e criação vezes atualizado.
ATUALIZAR
Gah! Isso não funciona em arquivos somente leitura, enquanto touch
faz. Eu sugiro:
:touch
if not exist "%~1" type nul >>"%~1"& goto :eof
set _ATTRIBUTES=%~a1
if "%~a1"=="%_ATTRIBUTES:r=%" (copy "%~1"+,,) else attrib -r "%~1" & copy "%~1"+,, & attrib +r "%~1"
@ dash-tom-bang:
Aqui está a explicação de Technet sobre o misterioso '+' e vírgulas:
cópia / b Source + ,,
As vírgulas indicam a omissão de
o parâmetro Destination.
O comando copy suporta a mesclagem de vários arquivos em um único arquivo de destino. Como um destino em branco não pode ser especificado usando um caractere de espaço no prompt de comando, duas vírgulas podem ser usadas para denotar isso.
E esta é a referência do comando copy da Technet: http://technet.microsoft.com/pt-br/library/bb490886.aspx
Se você quiser codificar você mesmo, o .NET oferece File.SetLastAccessTime
, File.SetCreationTime
e File.SetLastWriteTime
métodos.
aqui está uma versão recursiva usando o powershell ... isso irá mudar a hora da última modificação para todos os arquivos e subdiretórios, e arquivos dentro dos subdiretórios deste diretório
ps c:myDir> Get-ChildItem . * -recurse | ForEach-Object{$_.LastWriteTime = get-date}