C# 备份时使用上次修改的目录时间戳可靠吗?

C# 备份时使用上次修改的目录时间戳可靠吗?,c#,windows,backup,ntfs,C#,Windows,Backup,Ntfs,我正在设计一个简单的增量备份工具。在我修改目录的内容之后,这个目录的“Last Modified”属性是否可能保持不变?原因可能是NTFS的小故障或bug,我不知道 我发现有一个选项NtfsDisableLastAccessUpdate。是否也可以关闭修改时间戳更新 我想知道这个属性有多可靠,所以我可以决定使用它来备份文件系统是否是个好主意 我正在使用FileSystemInfo.LastWriteTime提取C#中的信息。我认为,最后修改的时间戳是不可靠的 时间戳由您使用的文件系统决定 例如,

我正在设计一个简单的增量备份工具。在我修改目录的内容之后,这个目录的“Last Modified”属性是否可能保持不变?原因可能是NTFS的小故障或bug,我不知道

我发现有一个选项
NtfsDisableLastAccessUpdate
。是否也可以关闭修改时间戳更新

我想知道这个属性有多可靠,所以我可以决定使用它来备份文件系统是否是个好主意


我正在使用
FileSystemInfo.LastWriteTime
提取C#中的信息。

我认为,最后修改的时间戳是不可靠的

时间戳由您使用的文件系统决定

例如,FAT32在处理修改/创建的时间时使用本地时间戳

而NTFS使用UTC时区

此外,FAT32还有很多问题需要解决。 这意味着它无法准确地将上次修改的日期记录到秒

此外,当您将文件从FAT32复制到NTFS时,您会看到大量其他时间戳

时间戳是如何由


此外,您可以使用第三方工具轻松访问任何文件和文件夹

FSUTIL有助于更改时间戳。示例命令-
fsutil行为集disablelastaccess 1

本网站可能会帮助您了解参数。


希望这对您的设计有所帮助。

在较新的Windows版本中,NTFS不会更新实际写入的打开日志文件上最后修改的时间戳,直到这些文件关闭或某些事情强制更新日期(不清楚是什么,但显然有某种方法)




没有为批处理文件提出可靠的编程解决方案
批处理文件的不可靠解决方案是对需要其修改日期最新的文件调用
dir

另一方面,他们提到了使用Windows API的编程解决方案(为我工作):

由于解决方法是让任何进程打开和关闭日志文件的句柄,因此编写了一个工具来完成这项工作,并使用以下API获取文件信息:
创建文件
GetFileInformationByHandle
握把


我知道,例如,在“XPlorer2”应用程序中发出“Refresh”确实会触发更新,这样所有应用程序都会开始看到更新的“last modified”时间戳。

我对C#一无所知,但我记得读到一些PHP函数不会修改日期修改日期,除非您明确告诉它们。因此,我认为您的答案取决于文件的修改方式。与其禁用更新,您似乎只能恢复修改时间戳-请参见.IIRC,将文件写入
a\b
只会更改
b
的修改日期,而不会更改
a
的修改日期。因此,您不能跳过任何具有相同修改日期的目录,您仍然需要遍历目录结构。什么是检测文件被修改的可靠方法?如果是NTFS。