Visual c++ 2015 express: _stat在Windows XP上不工作

Visual C++ 2015 express: _stat not working on Windows XP

本文关键字:XP Windows 工作 stat 2015 c++ express Visual      更新时间:2023-10-16

使用Visual c++ 2015 Express使用v140_xp作为Platform Toolset(目标Win32)编译的MSDN中运行以下示例在Windows 7上正常运行,但在我测试的几台机器上不能在Windows XP上运行。

// crt_stat.c
// This program uses the _stat function to
// report information about the file named crt_stat.c.
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
int main()
{
  struct _stat buf;
  int result;
  char timebuf[26];
  char* filename = "crt_stat.c"; // Absolute paths like "D:\crt_stat.c" produce the same behaviour.
  errno_t err;
  // Get data associated with "crt_stat.c":
  result = _stat( filename, &buf );
  // Check if statistics are valid:
  if ( result != 0 )
  {
    perror( "Problem getting information" );
    switch ( errno )
    {
    case ENOENT:
      printf( "File %s not found.n", filename );
      break;
    case EINVAL:
      printf( "Invalid parameter to _stat.n" );
      break;
    default:
      /* Should never be reached. */
      printf( "Unexpected error in _stat.n" );
    }
  }
  else
  {
    // Output some of the statistics:
    printf( "File size     : %ldn", buf.st_size );
    printf( "Drive         : %c:n", buf.st_dev + 'A' );
    err = ctime_s( timebuf, 26, &buf.st_mtime );
    if ( err )
    {
      printf( "Invalid arguments to ctime_s." );
      return 1;
    }
    printf( "Time modified : %s", timebuf );
  }
}

Windows 7输出:

File size     : 6
Drive         : D:
Time modified : Tue Sep  8 10:06:57 2015

Windows XP输出:

Problem getting information: Invalid argument
Invalid parameter to _stat.

是的,crt_stat.c位于可执行目录,也是CWD。

这是一个Bug还是我错过了什么?

正如在注释中指出的,这是运行时中的一个bug。现在(2015-09-09)修复还没有在更新中可用,但可能很快就会。一种变通方法是使用GetFileAttributesEx代替。

在Visual c++ Redistributable for Visual Studio 2015 Update 1上解决了这个bug

我通过在这里安装更新表单解决了这个问题:https://www.microsoft.com/en-us/download/details.aspx?id=49984