C++ 如何知道文件何时被编辑?

C++ 如何知道文件何时被编辑?,c++,windows,winapi,C++,Windows,Winapi,是否有一种方法(或API)可以知道何时(由程序或人员)编辑文本文件并执行特定操作 例如:我想在编辑文件c:\Users\john\free.txt时显示一个消息框。最简单:比较修改日期。但这是可以操纵的 或者对原始文件进行散列,并将其与当前文件进行比较。最简单:比较修改日期。但这是可以操纵的 或者对原始文件进行散列,并将其与当前文件进行比较。GetFileTime会对您有所帮助 还有GetFileAttributesEx。GetFileTime应该可以帮助您 还有GetFileAttribu

是否有一种方法(或API)可以知道何时(由程序或人员)编辑文本文件并执行特定操作


例如:我想在编辑文件c:\Users\john\free.txt时显示一个消息框。

最简单:比较修改日期。但这是可以操纵的


或者对原始文件进行散列,并将其与当前文件进行比较。

最简单:比较修改日期。但这是可以操纵的


或者对原始文件进行散列,并将其与当前文件进行比较。

GetFileTime会对您有所帮助


还有GetFileAttributesEx。

GetFileTime应该可以帮助您


还有GetFileAttributesEx。

检查文件的上次修改日期时间。 此方法检索与给定CFile对象实例或给定文件路径相关的状态信息

布尔状态( CFileStatus和rStatus )常数; 静态布尔帕斯卡状态( LPCTSTR lpszFileName, CFileStatus和rStatus );

参数 塔图斯 对用户提供的将接收状态信息的CFileStatus结构的引用。CFileStatus结构具有以下字段:

CTime m\u CTime创建文件的日期和时间

CTime m_mtime上次修改文件的日期和时间

CTime m_atime上次读取文件的日期和时间

ULONGLONG m_size文件的逻辑大小,以字节为单位,由DIR命令报告

BYTE m_attribute文件的属性字节

char m_szFullName[_MAX_PATH]Windows字符集中的绝对文件名

lpszFileName Windows字符集中的字符串,它是所需文件的路径。路径可以是相对路径或绝对路径,也可以包含网络路径名

返回值 如果成功获取指定文件的状态信息,则为TRUE;否则,错误。
备注:来自MSDN的信息检查文件的上次修改日期时间。 此方法检索与给定CFile对象实例或给定文件路径相关的状态信息

布尔状态( CFileStatus和rStatus )常数; 静态布尔帕斯卡状态( LPCTSTR lpszFileName, CFileStatus和rStatus );

参数 塔图斯 对用户提供的将接收状态信息的CFileStatus结构的引用。CFileStatus结构具有以下字段:

CTime m\u CTime创建文件的日期和时间

CTime m_mtime上次修改文件的日期和时间

CTime m_atime上次读取文件的日期和时间

ULONGLONG m_size文件的逻辑大小,以字节为单位,由DIR命令报告

BYTE m_attribute文件的属性字节

char m_szFullName[_MAX_PATH]Windows字符集中的绝对文件名

lpszFileName Windows字符集中的字符串,它是所需文件的路径。路径可以是相对路径或绝对路径,也可以包含网络路径名

返回值 如果成功获取指定文件的状态信息,则为TRUE;否则,错误。
备注:来自MSDN的信息取决于您确切想知道它的时间

  • 您的应用程序是否持续运行,是否希望尽快看到任何更改
  • 您的应用程序是一个需要检查一次更改的简单命令行应用程序吗
在第二种情况下,您可以检查文件的修改日期(如PoweRoy和Michal所建议的)或使用哈希(如PoweRoy所建议的)

如果应用程序持续运行,则应使用FindFirstChangeNotification和ReadDirectoryChanges函数。您可以在以下页面上阅读更多信息:


取决于你什么时候确切地想知道它

  • 您的应用程序是否持续运行,是否希望尽快看到任何更改
  • 您的应用程序是一个需要检查一次更改的简单命令行应用程序吗
在第二种情况下,您可以检查文件的修改日期(如PoweRoy和Michal所建议的)或使用哈希(如PoweRoy所建议的)

如果应用程序持续运行,则应使用FindFirstChangeNotification和ReadDirectoryChanges函数。您可以在以下页面上阅读更多信息:


您可以随时检查修改后的时间戳,并查看它是否更改为较新的时间戳。没有API可以直接向您提供该信息,请参见以下问题:。顺便说一句,无论是程序还是个人修改文件都没有区别——一个人需要使用一些程序,不是吗?:)看看@Bojan的答案,是的,有。使用FindFirstChangeNotification和ReadDirectoryChanges。@谢谢。今天早些时候,有一个关于Microsoft API的问题,它会通知注册表更改(
RegNotifyChangeKeyValue
),在我在这里发表评论后,我在想为什么文件系统中不存在类似的API。就在这里!(+1表示您的答案)您可以随时检查修改后的时间戳,并查看它是否更改为较新的内容。没有API可以直接向您提供该信息,请参见以下问题:。顺便说一句,无论是程序还是个人修改文件都没有区别——一个人需要使用一些程序,不是吗?:)看看@Bojan的答案,是的,有。使用FindFirstChangeNotification和ReadDirectoryChanges。@谢谢。今天早些时候,有一个关于Microsoft API的问题,它会通知注册表更改(
RegNotifyChangeKeyValue
),在我在这里发表评论后,我在想为什么文件系统中不存在类似的API。就在这里!(你的答案是+1)有没有办法避免无限循环?我不知道