2013-03-18 97 views
6

我想实现某些文件的实时重新加载。我认为有可能以某种方式读取文件的最后修改时间。这可以与我上次加载该文件的时间进行比较。我会保留后者的记忆。如何找出文件是否被修改?

如何查看某个文件自给定时间以来是否被修改过?该解决方案应该可以在Windows,Mac和Linux上运行。

更新:这似乎是我的问题提出了一些误解。为了使思路清晰,我在询问有关文件是否一般进行了修改。使用最后修改的时间正是我想到的,但我对任何其他解决方案都是开放的!不幸的是,我不能打开每个文件并比较它的内容,因为我们正在讨论视频游戏的所有纹理。

+1

上次修改时间的概念是不可移植的。 – 2013-03-18 13:30:57

+0

Windows至少有一个API调用,让您知道文件何时被修改。 http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx也许你的其他目标操作系统具有相似的功能。 – RedX 2013-03-18 13:31:41

+0

SUS/POSIX/IEEE1003平台有[stat](http://pubs.opengroup.org/onlinepubs/009695399/functions/stat.html)。但是没有可移植的C++方式。 – 2013-03-18 13:32:24

回答

2

看一看Boost.FileSystem,std::time_t last_write_time(const path&)。免责声明:我不确定这个概念的便携性如何。

0

使用statfstat系统调用。 他们产生了struct stat结构,其中包含修改时间st_atimespec

+0

这个平台是独立的吗? – danijar 2013-03-18 14:08:24

+0

如果MKS工具包安装在Windows上,那么我相信是的。 – suspectus 2013-03-18 14:13:24

+0

不是平台独立的。事实上,在许多系统上,可以在每个文件系统的基础上禁用“atime”。 – MSalters 2013-03-18 14:40:26

2

文件系统问题通常取决于操作系统。每个操作系统都有系统调用和/或库函数来访问这些信息。在Windows上有GetFileTime-功能,Unix/Linux提供stat,这也适用于Mac。也许Java提供了一些东西,但其他任何东西都很难用标准库来实现。 Google是你最好的朋友。

2

QFileInfo类提供与系统无关的文件信息。

QDateTime QFileInfo::lastModified() const 

返回上次修改文件的日期和时间。

应该是相当便携的,因为这是Qt的整个想法。 Windows,MacOS和Linux被官方支持。

+1

在这个小任务中使用这样一个大型库似乎有点矫枉过正。 – danijar 2013-03-18 13:46:37

+1

@sharethis - 谁说你只能用它做这个? Qt充满了一系列便携功能。顺便说一句,它似乎是迄今为止唯一的便携式解决方案:) – dtech 2013-03-18 13:47:32

+0

我正在开发一个OpenGL游戏,因此我不需要大部分的框架。不过谢谢你的回答,无论如何! – danijar 2013-03-18 14:09:21