文件时间修改
Windows下的文件时间有三种:创建时间、最后一次修改时间、最后一次访问时间。文件夹(目录)和文件一样,除此之外,还有个MFT修改时间,一般用不到,在此不谈。可是,在Windows资源管理器(或文件管理器)里,通过查看属性只能看到文件夹的创建时间,看不到另外两个。
创建时间,是指系统建立文件的时间,是系统通过CreateFile函数创建文件的时间,创建之后,文件创建时间就不会再改变。
最后一次修改时间,是系统最后一次调用WriteFile对目标文件进行改写的时间,只要调用WriteFile成功,就算文件内容没有发生变化,文件的修改时间也依旧会改变。
这两种都好理解,然而最后一次访问时间是什么呢?很多人可能不知道,以为是打开文件的时间,或是读取文件的时间,要是这样它就和修改时间就没什么太大的区别了,其实访问时间也是创建时间的一种,确切地说,文件的最后访问时间是文件的“物理创建时间”,或者说是在不同的分区下创建文件的时间。在NTFS分区,当一个文件在同一分区下面移动时,这个文件的物理位置其实并没有发生变化,变的只是MFT(主文件表)里的记录,也就是指向此文件的链接或路径变了,所以在同一分区下面移动文件一般是瞬间完成的,而在不同分区下面移动文件时,系统就必须在新的分区重新在MFT中为该文件建一条记录,之后再把原MFT中的创建时间登记在新分区的文件表中,所以我们说,所谓创建时间,其实是逻辑上的时间,但该文件在物理上确实被重新建立了数据,所以就取名“访问时间”。所以,所谓访问时间,就是指该文件在新分区创建的时间,当一个文件移动到了另一个分区,它的访问时间就会发生变化。通过查看访问时间,我们可以知道文件是否被移动过(物理上的移动或不同分区之间的移动,同一分区下面移动不算)。
排除第三方软件和系统时间的作用,一个文件刚被创建时,三个时间是一样的,当它移动到另一个位置后,创建时间和修改时间不变,访问时间可变可不变;当它复制到另一个位置后,创建时间和访问时间改变,修改时间仍然不变。反之可推,三时间相同,说明文件自创建后没有被复制、改写和移动(不同分区);修改时间大于创建时间,文件一定被修改过,修改时间小于创建时间,文件一定被复制过,访问时间大于创建时间,文件一定被移动过。
文件夹的时间和文件稍有不同,首先文件夹不能离开它所在的分区,复制或移动到另一分区,创建时间就会发生改变,其次,文件夹的修改时间是指它的目录里面最后一次进行创建、删除、重命名等操作的时间,如果在它里面创建其它文件或文件夹,或者改变目录内的文件名,移走其中一个文件或目录,它的修改时间和访问时间都会发生变化,在这一点上,文件夹的修改时间和访问时间似乎是一样的。不过,只有子目录的改变才是有效的,如果是子目录的子目录则对该目录而言,改变的不是它,而是它的子目录。对于文件夹而言,若三时间相同,如果是空文件夹则说明它被创建后里面从没有放进去过东西,如果里面有文件或文件夹,则说明它一定是被复制过的,而且从复制后就再也没有改动过里面的东西(创建、删除、移走或重命名)。如果创建时间和修改时间不一致,说明文件夹被改动过。
要修改文件时间,除了用软件,其实我们可以自己解决,比如改变创建时间,首先把系统时间调整到接近那个时间,然后等快到时间时,快速复制一个副本即可,不过要首先看下文件大小,然后根据它的大小确定什么时候开始复制,复制后再删除源文件,这样就相当于间接改变了文件的创建时间。改变修改时间的话,如果文件是文本之类好办,如果是其它格式如EXE等,就不行了,只能用软件来实现。访问时间前面说过了,同样还是先调整系统时间,然后把目标文件复制到另一个盘,等时间到了立即复制回来。另外,文件时间是精确到毫秒(ms)的,如果要对比两个文件的时间是否相同等,就要用到第三方软件了,方法就是使用CompareFileTime这个系统API。
能够修改文件时间的第三方软件有如下几种:
文件创建日期修改器 FileTime
http://down.tech.sina.com.cn/content/47339.html
NewFileTime – 批量修改文件创建/访问/修改日期
http://www.appinn.com/newfiletime/
http://softwareok.com/?seite=Microsoft/NewFileTime
现在,这方面又多了新成员:chgfldt!
■开发背景:
在用commons-net的FTP功能下载来文件的时间是新的时间,和服务器上的是不一样的。为了使下载后的文件时间和服务器上的一致,开发了这个利器。
■用法:
chgfldt /H
Change File Date Time Version 0.0.1 Compiled on March 1 2017 for Windows
Copyright (C) 2017 Dubenju(dubenju@126.com). All rights reserved.
Usage:
chgfldt [/D | /H] /F:filename [options]
/D:sisplay the file's datetime informations.
/H:show this.
/F:the targer file.
options:
/CD: Created date(format:yyyy-mm-dd).
/AD:Accessed date(format:yyyy-mm-dd).
/MD:Modified date(format:yyyy-mm-dd).
/CT: Created time(format:hh:mi:ss).
/AT:Accessed time(format:hh:mi:ss).
/MT:Modified time(format:hh:mi:ss).
Return Value:
0:Normal end.
-1:file open error.
-2:file is null.
-3:GetFileTime error.
-4:Created error.
-5:Modified error.
-6:Accessed error.
-7:SetFileTime error.
还等什么,赶紧下载下来使劲用吧!
■下载
开源中国码云:https://git.oschina.net/dubenju/chgdt.git
GitHub:https://github.com/dubenju/chgdt.git
Sourceforge:https://sourceforge.net/projects/chgfldt/
国内外同步上线哦!
不过毕竟是概念版,欢迎涂鸦!