精华内容
下载资源
问答
  • 修改文件时间

    千次阅读 2013-09-24 12:10:13
    怎样修改文件时间,主要介绍windows API相关函数,顺便说一下Linux的Touch,Python的相关。

    Linux中有个能改变文件时间的工具Touch,能设置文件访问时间和修改时间。

    Windows中我还没见过类似工具,以前Dos下有一些工具可以做这个事情,但都太遥远了。

    自己动手,丰衣足食,没有只好自己写一个了。
    Python中有os.utime可以用,用这个只需要几行代码就可以实现Touch的功能。
    但跟Touch一样,utime也只能改访问时间和修改时间。
    我需要连创建时间也修改了,怎么弄呢?只好用windows API去实现了。
    先找到一个函数:
    WINBASEAPI
    BOOL
    WINAPI
    SetFileTime(
        HANDLE hFile,
        CONST FILETIME *lpCreationTime,
        CONST FILETIME *lpLastAccessTime,
        CONST FILETIME *lpLastWriteTime
        );

    CreateFile函数打开文件,得到hFile。
    后面三个时间就是文件的创建时间,最后访问时间,最后修改时间。
    不过FILETIME 的成员是两个DWORD,不好设置。
    没关系有个函数可以转换时间:
    WINBASEAPI
    BOOL
    WINAPI
    SystemTimeToFileTime(
        CONST SYSTEMTIME *lpSystemTime,
        LPFILETIME lpFileTime
        );

    SYSTEMTIME的结构很方便人类使用了:
    typedef struct _SYSTEMTIME {
        WORD wYear;
        WORD wMonth;
        WORD wDayOfWeek;
        WORD wDay;
        WORD wHour;
        WORD wMinute;
        WORD wSecond;
        WORD wMilliseconds;
    } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;

    如果你需要设为当前时间,需要下面函数:
    WINBASEAPI
    VOID
    WINAPI
    GetSystemTime(
        LPSYSTEMTIME lpSystemTime
        );

    考虑到有些文件是只读的,用读写方式打开会失败,还需要函数:
    GetFileAttributesSetFileAttributes
    展开全文
  • Windows下使用C/C++修改文件时间

    千次阅读 2018-09-04 21:08:52
    具体为什么要修改文件时间就不去纠结了,感兴趣的可以去做个问卷调查,也可以自行脑补,反正经常有小伙伴问怎么去修改文件时间。 最简单的解决方案 文件的时间作为文件的属性,当然是由文件的编辑工具生成或修改...

    背景

    在某些特定场景下,会有修改文件创建时间、修改时间的需求。具体为什么要修改文件时间就不去纠结了,感兴趣的可以去做个问卷调查,也可以自行脑补,反正经常有小伙伴问怎么去修改文件时间。

    最简单的解决方案

    文件的时间作为文件的属性,当然是由文件的编辑工具生成或修改的。那么最简单的方式就是把你的系统时间设置为想要改的时间点,比如设置为2000年1月1日的某个时间点,然后打开文件编辑工具,随便修改点内容,比如在某个位置敲一个字符然后删除并保存,虽然文件的内容没变,但是文件的修改时间已经变为2000年1月1日。然而你会发现,文件的创建时间没有更改,所以你需要将文件另存为某个文件,你就会发现另存为的文件的创建时间变成了你想要的时间。这个时候你就可以拿这个另存为的文件去交差了,一切很简单。

    缺点
    1、修改系统时间很简单,但是总是不想改,嫌麻烦。
    2、需要修改或另存为文件,批量修改文件时间不被累死就被烦死。
    3、有些文件压根就找不到对应的编辑工具,谈何修改或另存为。
    4、太低效。

    最简单高效的解决方案

    最简单高效的方式,当然是调用系统接口,直接修改文件时间为自己指定的时间。

    原理

    在windows系统中,修改文件的时间属性一般都是调用API直接修改,C/C++ API如下:

    BOOL SetFileTime(
      HANDLE         hFile,
      CONST FILETIME *lpCreationTime,
      CONST FILETIME *lpLastAccessTime,
      CONST FILETIME *lpLastWriteTime
    );

    详细的API说明在微软官方文档页面上有介绍,可以自行到微软官方文档页面进行搜索查询。

    实现Demo

    以下采用C语言实现,以便参考,读者可以采用自己擅长的语言自行实现。

    #include "windows.h"
    #include "stdio.h"
    #include "stdlib.h"
    
    int main(int argc, char *argv[]) {
        // 传参格式: 可执行程序.exe fileName time
        // 传参示例:App.exe test.txt 2018-09-04 20:28:50
    
        // 参数检查
        if( argc != 4 ) {
            printf("Use format: %s fileName time\nUse like: %s test.txt 2018-09-04 20:28:50\n", argv[0], argv[0]);
            return -1;
        }
    
        // 检查时间格式
        if( strlen(argv[2]) != 10 || strlen(argv[3]) != 8 ) {
            printf("Time format is invalid, time format like: 2018-09-04 20:28:50\n");
            return -1;
        }
    
        // 读取指定时间
        SYSTEMTIME spec_time;
        sscanf(argv[2],"%d-%d-%d", &spec_time.wYear, &spec_time.wMonth, &spec_time.wDay);
        sscanf(argv[3],"%d:%d:%d", &spec_time.wHour, &spec_time.wMinute, &spec_time.wSecond);
        spec_time.wDayOfWeek    = 1;
        spec_time.wMilliseconds = 0;
        // TODO: 此处省略对时间有效性的校验
    
        // 获取文件句柄
        HANDLE hFile = CreateFile(argv[1],      // LPCTSTR lpFileName,
            GENERIC_READ|GENERIC_WRITE,         // DWORD dwDesiredAccess,
            FILE_SHARE_READ|FILE_SHARE_DELETE,
            NULL,                               // LPSECURITY_ATTRIBUTES lpSecurityAttributes,
            OPEN_EXISTING,
            FILE_FLAG_BACKUP_SEMANTICS,         // DWORD dwFlagsAndAttributes,
            NULL);
    
        if( hFile == INVALID_HANDLE_VALUE ) {
            printf("Get file handle failed, error = %s\n", GetLastError());
            return -1;
        }
    
        // 设置文件时间
        FILETIME ft,LocalFileTime;
        SystemTimeToFileTime(&spec_time, &ft);
        LocalFileTimeToFileTime(&ft,&LocalFileTime);
    
        if(SetFileTime(hFile,&LocalFileTime,(LPFILETIME) NULL,&LocalFileTime)) {
            printf("Set file time success\n");
        }else{
            printf("Set file time failed\n");
        }
        CloseHandle(hFile);
        return 0;
    }
    展开全文
  • linux下查看和修改文件时间

    千次阅读 2018-09-29 15:29:11
    本文转载:     原文地址: linux下查看和修改文件时间           

    本文转载:

     

     

    原文地址:  linux下查看和修改文件时间                  

     

     

     

     

     

    展开全文
  • Linux下一个文件有三个主要的变动时间,mtime,ctime,atime: mtime(modification time):当文件的内容更改时,就会更新这个时间。 ctime(status time):当文件的状态被更改时,会更改这个时间,比如像文件的权限或者...

    Linux下一个文件有三个主要的变动时间,mtime,ctime,atime:
    mtime(modification time):当文件的内容更改时,就会更新这个时间。
    ctime(status time):当文件的状态被更改时,会更改这个时间,比如像文件的权限或者属性被更改时就会更改这个时间。
    atime(access time):就是文件访问时间,当文件的内容被读取时就会更改这个时间。比如使用cat指令读取某个文件时,这个时间就会被更改。

    者三个时间可以使用可以同过加 –time 参数来获取
    ll 文件名 这种方式会默认展现mtime
    ll –time=atime 文件名 获取atime
    ll –time=ctime 文件名 获取ctime

    [root@localhost tmp]# ll timetest 
    -rw-r--r-- 1 root root 0 Oct 29 22:19 timetest
    [root@localhost tmp]# ll --time=atime timetest 
    -rw-r--r-- 1 root root 0 Oct 29 22:19 timetest
    [root@localhost tmp]# ll --time=ctime timetest 
    -rw-r--r-- 1 root root 0 Oct 29 22:19 timetest

    上面这个例子中,我的文件是刚刚创建的,所以显示的时间都是一样的。可以过几分钟用cat指令访问这个文件,再使用chmod指令修改这个文件权限,在来查看这个文件的三个时间时,会发现有变化了。

    有时候由于时区等问题,你的文件时间可能和标准时间不一致,这个时候就可以使用touch指令来修改文件时间。

    把时间修改到三天前

    [root@localhost tmp]# touch -d "3 days ago" timetest 
    [root@localhost tmp]# ll timetest ; ll --time=atime timetest ; ll --time=ctime timetest 
    -rw-r--r-- 1 root root 0 Oct 26 22:29 timetest
    -rw-r--r-- 1 root root 0 Oct 26 22:29 timetest
    -rw-r--r-- 1 root root 0 Oct 29 22:29 timetest

    把时间修改到某一个具体的时间点

    [root@localhost tmp]# touch -t 1710262210 timetest 
    [root@localhost tmp]# ll timetest ; ll --time=atime timetest ; ll --time=ctime timetest 
    -rw-r--r-- 1 root root 0 Oct 26 22:10 timetest
    -rw-r--r-- 1 root root 0 Oct 26 22:10 timetest
    -rw-r--r-- 1 root root 0 Oct 29 22:30 timetest

    注意:上面两个指令都指修改了mtime和atime ,ctime并没有被修改,要想修改ctime可以使用touch -c 文件 来实现

    [root@localhost tmp]# touch -c timetest 
    [root@localhost tmp]# ll timetest ; ll --time=atime timetest ; ll --time=ctime timetest 
    -rw-r--r-- 1 root root 0 Oct 29 22:35 timetest
    -rw-r--r-- 1 root root 0 Oct 29 22:35 timetest
    -rw-r--r-- 1 root root 0 Oct 29 22:35 timetest

    touch -c 文件名 这个指令会修改文件的三个时间,当文件不存在时会创建文件
    touch -a 文件名 这个指令我使用man来查看时,上面说明只会修改文件的访问时间,但是在实际操作的时候发现除了mtime每变之外,atime和ctime都发生了改变。这个就有点百思不得其解了。先在这做个标记吧,有大神知道也可以指点一下。

    [root@localhost tmp]# touch -a timetest 
    [root@localhost tmp]# ll timetest ; ll --time=atime timetest ; ll --time=ctime timetest 
    -rw-r--r-- 1 root root 0 Oct 29 22:35 timetest
    -rw-r--r-- 1 root root 0 Oct 29 22:37 timetest
    -rw-r--r-- 1 root root 0 Oct 29 22:37 timetest
    展开全文
  • 批量修改文件时间

    千次阅读 2019-11-13 21:27:31
    其实这个需求都要从某一届的毕业答辩开始说起,当时有个同学打开了目录后,下面有个老师说你这个最后修改日期怎么在暑假...如果失败了,就修改一下文件的编码 utf-8->ANSI @ echo off ::target modify fold...
  • 修改文件时间与创建新文件:touch

    千次阅读 2011-09-14 20:54:54
    修改文件时间与创建新文件:touch from cnbird2008的专栏 7.3.5 修改文件时间与创建新文件:touch 在介绍ls命令时,提到每个文件在Linux下面都会记录3个主要的修改时间: • modification time(mtime,修改...
  • windows批量修改文件时间

    千次阅读 2020-08-12 10:18:27
    windows批量修改文件修改时间,要在powershell里面执行 更改为当前时间: Get-Childitem -path ‘D:\Tomcat7\webapps’ -Recurse | foreach-object { $.LastWriteTime = Get-Date ; $.CreationTime = Get-Date } ...
  • touch命令 修改文件时间

    千次阅读 2019-04-20 10:33:46
    防止创建文件 如果在 touch 后面直接跟上一个文件名,该文件如果不存在...我们知道,如果不带任何选项执行 touch 命令时,文件的访问时间修改时间都是同时被改变成当前系统时间。如下所示: [root@localhost ~]...
  • touch 修改文件时间或创建新文件

    千次阅读 2016-09-09 16:23:16
    追溯前沿在我们使用这个命令之前我们需要了解一下关于文件时间参数: - modification time (mtime) 当文件的“内容数据”改变时,就会...就是文件的属性和权限被修改了,就会更新这个时间。 - access time 当“文件
  • linux批量修改文件时间

    千次阅读 2017-05-18 13:57:42
    1、批量修改为当前系统时间 touch `find ./* -name '*'` 2、批量修改为指定时间 touch -t 201412261313.30 `find ./* -name '*'` -t后面的时间格式为 [[CC]YY]MMDDhhmm[.ss]
  • 在编译过程中,有可能会因为文件创建的时间晚于当前时间,会出现编译不通过,编译死循环,以及未编译成功的情况,因此需要以下命令修改文件的时间戳。find ./* -exec touch {} \;转载来自:...
  • 用powershell修改文件时间

    千次阅读 2018-06-04 13:56:12
    转载博客https://blog.csdn.net/u012223913/article/details/721239061. 步骤新建一个bat文件,在其中添加语句:@ECHO OFF powershell.exe -command "ls 'folder_path\*.dll' | foreach-object { $_....
  • java修改文件时间

    千次阅读 2015-09-10 22:08:32
    //获取文件时间,因为时间中间也是有空格,这里分割后再次拼接到一起 String fileName = str.substring(fileUrl.lastIndexOf( "/" )+ 1 , fileUrl.length()); //获取文件的名字,以便在后面获取指定文件夹下面...
  • Java实现修改文件时间

    千次阅读 2013-02-03 23:44:49
    Windows操作系统中的所有文件都有一项属性,就是“最后修改时间”(LastModified),手工杀毒经常用到这项属性,用以对比可疑文件。因此,咱们做黑软的就有必要在这个属性上面做做手脚了,而且我们还可以精确到秒。...
  • VC修改文件时间属性(修改/访问时间)

    千次阅读 2014-06-18 17:59:14
    在Windows平台下,用Zlib解压文件。创建文件时间quan'bu
  • 使用python批量修改文件时间

    千次阅读 2019-01-26 09:49:44
    https://sourceforge.net/projects/pywin32/files/pywin32/ # _*_coding:utf-8 _*_ #@Time :2019/1/26 09:15 #@Author :聪明的牛 #@FileName :modifyFileTimeModule.py #@Compile :Python 2.7.15 from win32f...
  • 获取并修改文件时间

    千次阅读 2010-08-27 17:08:00
     在Windows操作系统下并没有提供任何可供修改文件夹时间属性的方法和手段,即使是在Win32 API函数中,也只是提供了对文件时间属性进行修改的函数调用,而没有关于文件夹时间属性修改的只言片语。虽然Windows...
  • QTTabBar的批量修改文件时间的插件

    千次阅读 2017-04-28 08:43:59
    QTTabBar是一款可以在Windows资源管理器中使用Tab多标签功能的小工具,而且该工具还是开源的,并且还可以自己写插件挂载,之前由于想批量修改照片的时间,找了几款软件,都不大如意,想想还是自己写一个吧,单独写一...
  • linux修改文件时间

    千次阅读 2008-06-18 15:43:00
    m 改变档案的修改时间记录。 c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。 f 不使用,是为了与其他 unix 系统的相容性而保留。 r 使用参考档的时间记录,与 --file 的效果一样。 d 设定...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,261
精华内容 15,704
关键字:

修改文件时间