【开源工具】文件时间修改

原创
2017/03/02 21:01
阅读数 6.7K

文件时间修改

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/

国内外同步上线哦!

 

不过毕竟是概念版,欢迎涂鸦!

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
如比如比博主

引用来自“ejzhang”的评论

何不用touch?

@ejzhang 以前的日期,该系统日期后再touch,在设回来哈
2017/03/03 04:36
回复
举报
何不用touch?
2017/03/03 02:14
回复
举报
更多评论
打赏
2 评论
0 收藏
0
分享
返回顶部
顶部