ctime, mtime, holding directory, windows, linux

11

让我们一劳永逸地澄清这个问题。我试着在谷歌上搜索,但似乎无法在一个地方找到这些信息。

在Windows和Linux上,当文件被创建或删除时,所在目录的修改时间(mtime)会同时改变。在Linux上,更改时间(ctime)也会改变,但在Windows上不会,因为那里的ctime是指“创建时间”。

如果重新打开并写入文件,则所在目录的修改时间(mtime)不会改变。但是,在Windows和Linux上,文件的修改时间(mtime)都会改变,在Linux上,更改时间(ctime)也会改变,而在Windows上,更改时间(ctime)指的是创建时间。

这正确吗?有哪些注意事项?例如在Windows网络共享或Samba中是否有例外情况?

编辑:那些投票将此关闭为“离题”的人,请在评论中说明您认为这个问题应该发布在哪个网站上。在Stackoverflow上有大量关于mtime / ctime的问题,仅因为我没有包含依赖于此知识的PHP片段,就不能将其视为没有相关内容 :/


1
如果我没记错的话,只有当你的编辑器保存函数首先删除文件然后重新创建它时,ctime 才会更改。如果你只是打开文件进行覆盖,那么 ctime 不会更改,只有 mtime 会更改。 - Gabor Garami
Linux有X个文件系统,我可以想象它们都可以以略微或完全不同的方式执行此操作。不,即使您希望如此,也无法一劳永逸地澄清这一点。这就是IT工作的方式。 - hakre
这就像说getdents在不同的文件系统上有稍微不同的返回值。当然,这个也有语义和期望。 - chx
1个回答

4

这样想:

目录是一个包含指向文件的指针(或“链接”)的文件

因此:

  • 更改文件的内容不会影响目录
    (除非首先删除文件,然后使用相同的名称创建它,如上面的Gabor Garami所述)

  • 添加、删除或重命名文件将更改目录文件的内容
    这将导致其ctime/mtime根据操作系统而变化,如您所描述的


我知道它应该是什么,但这不是问题的关键...我们在谈论Windows,对吧? - chx
那么,在这种情况下,我们谈论的是哲学而不是科学...我猜每个Windows版本都会有自己的行为方式。建议您放弃这条路,寻找完全不同的解决方案。 - Gonen
1
我想要的是“是的,这是预期的行为,有人看到不同的吗?”答案可能是:“在Windows ME上,通过Netware 286进行网络连接实际上是...” - chx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接