• 【转】windows c++获取文件信息——_stat函数的使用


    _stat函数的功能

    _stat函数用来获取指定路径的文件或者文件夹的信息。

    函数声明

    int _stat(
       const char *path,
       struct _stat *buffer 
    );

    参数:

    path——文件或者文件夹的路径

    buffer——获取的信息保存在内存中

    返回值:

    正确——返回0

    错误——返回-1,具体错误码保存在errno

    struct _stat结构体

    _stat结构体是文件(夹)信息的结构体,定义如下:

    struct stat {
            _dev_t     st_dev;        //文件所在磁盘驱动器号
            _ino_t     st_ino;        //inode,FAT、NTFS文件系统无意义
            unsigned short st_mode;   //文件、文件夹的标志
            short      st_nlink;      //非NTFS系统上通常为1
            short      st_uid;        //UNIX系统上为userid,windows上为0
            short      st_gid;        //UNIX系统上为groupid,windows上为0
            _dev_t     st_rdev;       //驱动器号,与st_dev相同
            _off_t     st_size;       //文件字节数
            time_t st_atime;          //上次访问时间
            time_t st_mtime;          //上次修改时间
            time_t st_ctime;          //创建时间
            };

    以上信息就是可以通过_stat函数获取的所有相关信息,一般情况下,我们关心文件大小和创建时间、访问时间、修改时间。

    例子

    注:该例子来自MSDN,http://msdn.microsoft.com/en-us/library/14h5k7ff.aspx

    // 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( void )
    {
       struct _stat buf;
       int result;
       char timebuf[26];
       char* filename = "crt_stat.c";
       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.
    ", filename);
               break;
             case EINVAL:
               printf("Invalid parameter to _stat.
    ");
               break;
             default:
               /* Should never be reached. */
               printf("Unexpected error in _stat.
    ");
          }
       }
       else
       {
          // Output some of the statistics: 
          printf( "File size     : %ld
    ", buf.st_size );
          printf( "Drive         : %c:
    ", buf.st_dev + 'A' );
          err = ctime_s(timebuf, 26, &buf.st_mtime);
          if (err)
          {
             printf("Invalid arguments to ctime_s.");
             exit(1);
          }
          printf( "Time modified : %s", timebuf );
       }
    }

    输出大致如下:

    File size            :732

    Drive                 :C:

    Time modified   :Thu Feb 07 14:39:36 2002

    支持不同时间长度和文件长度

    _stat函数中时间定义为64位,文件长度也定义为32位,同时使用char*表示文件名称。我们知道可以时间可以定义为64位和32位:__time64和__time32,文件名也可以用宽字符来表示,文件长度也可以定义为64位。因此该函数有很多变体,这些函数用法都是一样的,我们根据具体情况选择使用哪个函数。

    int _stat(
       const char *path,
       struct _stat *buffer 
    );
    int _stat32(
       const char *path,
       struct __stat32 *buffer 
    );
    int _stat64(
       const char *path,
       struct __stat64 *buffer 
    );
    int _stati64(
       const char *path,
       struct _stati64 *buffer 
    );
    int _stat32i64(str
       const char *path,
       struct _stat32i64 *buffer 
    );
    int _stat64i32(str
       const char *path,
       struct _stat64i32 *buffer 
    );
    int _wstat(
       const wchar_t *path,
       struct _stat *buffer 
    );
    int _wstat32(
       const wchar_t *path,
       struct __stat32 *buffer 
    );
    int _wstat64(
       const wchar_t *path,
       struct __stat64 *buffer 
    );
    int _wstati64(
       const wchar_t *path,
       struct _stati64 *buffer 
    );
    int _wstat32i64(
       const wchar_t *path,
       struct _stat32i64 *buffer 
    );
    int _wstat64i32(
       const wchar_t *path,
       struct _stat64i32 *buffer 
    );
  • 相关阅读:
    CSS简介
    jQuery学习笔记一
    JavaScript基础testDemo
    JavaScript知识点记录
    js实现404页面倒计时跳转 猫
    html5动画之等待加载动画 猫
    开发jquery插件小结 猫
    jquery做一个小的轮播插件有BUG,后续修改 猫
    js倒计时跳转jquery插件版 猫
    nodejs安装配置 猫
  • 原文地址:https://www.cnblogs.com/matthew-2013/p/4679406.html
Copyright © 2020-2023  润新知