当前位置: 首页 > 面试题库 >

设置/更改文件的ctime或“更改时间”属性

姬向明
2023-03-14
问题内容

我希望使用java.nio.Files该类来更改Java中文件的时间戳记元数据。

我想更改所有3个Linux / ext4时间戳(最后修改,访问和更改)。

我可以按如下方式更改前两个时间戳字段:

Files.setLastModifiedTime(pathToMyFile, myCustomTime);
Files.setAttribute(pathToMyFile, "basic:lastAccessTime", myCustomTime);

但是,我无法修改文件的最后一次 更改:
时间。同样,值得关注的是文档中没有提到更改时间戳。最接近的可用属性是creationTime,我尝试没有成功。

关于如何Change:根据Java中的自定义时间戳修改文件元数据的任何想法?

谢谢!


问题答案:

我可以使用两种不同的方法来修改ctime:

  1. 更改内核,使其ctimemtime
  2. 编写一个简单(但很笨拙)的shell脚本。

第一种方法:更改内核。

KERNEL_SRC/fs/attr.c “显式定义”时,此修改将ctime更改为与mtime相匹配的内容。

有很多方法可以“明确定义” mtime,例如:

在Linux中:

touch -m --date="Wed Jun 12 14:00:00 IDT 2013" filename

在Java中(使用Java 6或7,可能还有其他):

long newModificationTime = TIME_IN_MILLIS_SINCE_EPOCH;
File myFile = new File(myPath);
newmeta.setLastModified(newModificationTime);

这是KERNEL_SRC/fs/attr.cnotify_change函数的更改:

    now = current_fs_time(inode->i_sb);

    //attr->ia_ctime = now;  (1) Comment this out
    if (!(ia_valid & ATTR_ATIME_SET))
        attr->ia_atime = now;
    if (!(ia_valid & ATTR_MTIME_SET)) {
        attr->ia_mtime = now;
    }
    else { //mtime is modified to a specific time. (2) Add these lines
        attr->ia_ctime = attr->ia_mtime; //Sets the ctime
        attr->ia_atime = attr->ia_mtime; //Sets the atime (optional)
    }

(1)这行未注释,将在更改文件时将ctime更新为当前时钟时间。我们不想要那样,因为我们想自己设置ctime。因此,我们将这一行注释掉。(这不是强制性的)

(2)这实际上是解决方案的症结所在。notify_change更改文件后执行该功能,其中时间元数据需要更新。如果未指定mtime,则将mtime设置为当前时间。否则,如果将mtime设置为特定值,我们还将ctime和atime设置为该值。

第二种方法:简单(但很笨拙)的shell脚本。

简要说明:1)将系统时间更改为目标时间2)在文件上执行chmod,文件ctime现在反映了目标时间3)还原系统时间。

changectime.sh

#!/bin/sh
now=$(date)
echo $now
sudo date --set="Sat May 11 06:00:00 IDT 2013"
chmod 777 $1
sudo date --set="$now"

如下运行:./changectime.sh MYFILE

文件的ctime现在将反映文件中的时间。

当然,您可能不希望该文件具有777权限。使用前,请确保根据需要修改此脚本。



 类似资料:
  • 使用指南 - 统计设置 - 概述 - 设置更改后的生效时间 百度统计中的设置项在设置或更改后,一般20分钟后生效。

  • 我一直在尝试创建一个批处理文件,将笔记本电脑设置为高功率设置运行minecraft,然后在minecraft关闭时将电源设置设置为节能模式。我正试图发射装有我的techniclauncher的雷艇,目前我的蝙蝠看起来像这样。 启动电源 /s8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c 启动C:\Users\Eric\Downloads\TechnicLauncher。e

  • 问题内容: 如何使用Go获取文件的ctime,mtime,atime并进行更改? 在Go 1.1.2中,* os.Stat只能获取mtime * os.Chtimes可以更改mtime和atime,而不能更改ctime。 问题答案: 的Linux 时间 ctime是索引节点或文件更改时间。更改文件属性(例如更改所有者,更改权限或将文件移至其他文件系统)时,ctime会更新,但在修改文件时也会更新。

  • 问题内容: Firefox的Firebug具有一个不错的功能,称为“属性更改中断”,在这里我可以标记任何对象的任何属性,并且它将在更改之前停止JavaScript执行。 我正在尝试在Google Chrome浏览器中实现相同功能,但是在Chrome调试器中找不到该功能。如何在Google Chrome浏览器中执行此操作? 问题答案: 如果您不介意弄乱源代码,则可以使用访问器重新定义属性。

  • 问题内容: 如何控制pyplot图的轴设置。我干完了 我得到的就是我想要的 但我希望x轴位于0而不是底部。我该怎么做? 问题答案:

  • 问题内容: 是否可以对Windows 7上的默认设置进行永久更改?我想更改字体大小和外壳大小。 问题答案: QtConsole可通过ConsoleWidget进行配置。从…开始: