我在功能stat()方面遇到了严重问题。我有一个在Windows 7下使用cygwin编译的应用程序,以及在Windows 7上使用MSVC ++编译的相同应用程序。该应用程序包含以下代码:
struct stat stb;
memset( &stb, 0, sizeof( stb ) );
stat( szPath, &stb );
cout << hex << uppercase << setw(8) << stb.st_mtime << endl;
szPath
是文件的路径。应用程序不会以任何方式修改该文件。问题是,我得到一些文件的不同结果。例如:
cygwin version: 40216D72
MSVC++ version: 40217B82
差异总是 E10 = 3600 = 1小时
使用谷歌i found this,这看起来与我看到的问题完全相同。有可行的方法如何解决这个问题?我不能使用任何WinAPI调用。最简单可靠的解决方案是我正在寻找的,但如果它需要复杂,那就这样吧。可靠性和可移植性(win + linux)是最重要的事情。
答案 0 :(得分:2)
为了在这里获得可靠性和可移植性(或者在大多数情况下,两个平台对应该是“相同”的代码执行不同的事情),您可能需要使用某种形式的依赖于目标的代码,例如:
#ifdef _MSC_VER
// do MSVC++-specific code
#else
// do Linux/Cygwin/generic code
#endif
然后您应该能够在_MSC_VER
部分中使用WinAPI调用,因为只有在使用MSVC ++时才会编译它
答案 1 :(得分:1)
显然每http://support.microsoft.com/kb/190315这实际上是一个特征,虽然它对我来说真的好像是个错误。他们说您可以通过清除系统时钟的日期/时间属性对话框中的“自动调整夏令时更改时钟”来解决此问题。
如果你有文件的日期,你可以使用dst的相对状态来确定你是否需要在MSVC中自己进行一小时的调整,但这也是hacky。
答案 2 :(得分:0)
不确定您使用的功能但我知道Windows和Linux使用不同的系统时钟。 Windows在系统时钟上存储本地时间(包括DST)。 Linux(至少传统上)在系统时钟上存储GMT(或精确的UTC)。如果这适用于cygwin,我不这样做。
如果linux系统与windows共享硬件,则需要将其配置为使用系统时钟(如windows)或每次窗口调整DST时搞乱。