精华内容
下载资源
问答
  • stat()用来将参数file_name所指的文件状态, 复制到参数buf所指的结构中 const char:表示文件路径 struct stat*buf: 表示声明的结构体 1 struct stat { 2 dev_t st_dev; //device 文件的设备编号 3 ino_t st_i...
    /*
    函数原型:int stat(const char * file_name,struct stat *buf);
                stat()用来将参数file_name所指的文件状态, 复制到参数buf所指的结构中
                const char:表示文件路径
                struct stat*buf: 表示声明的结构体
     1 struct stat {
     2     dev_t st_dev; //device 文件的设备编号
     3     ino_t st_ino; //inode 文件的i-node
     4     mode_t st_mode; //protection 文件的类型和存取的权限
     5     nlink_t st_nlink; //number of hard links 连到该文件的硬连接数目, 刚建立的文件值为1.
     6     uid_t st_uid; //user ID of owner 文件所有者的用户识别码 
     7     gid_t st_gid; //group ID of owner 文件所有者的组识别码 
     8     dev_t st_rdev; //device type 若此文件为装置设备文件, 则为其设备编号 
     9     off_t st_size; //total size, in bytes 文件大小, 以字节计算 
    10     unsigned long st_blksize; //blocksize for filesystem I/O 文件系统的I/O 缓冲区大小. 
    11     u nsigned long st_blocks; //number of blocks allocated 占用文件区块的个数, 每一区块大小为512 个字节. 
    12     time_t st_atime; //time of lastaccess 文件最近一次被存取或被执行的时间, 一般只有在用mknod、 utime、read、write 与tructate 时改变.
    13     time_t st_mtime; //time of last modification 文件最后一次被修改的时间, 一般只有在用mknod、 utime 和write 时才会改变
    14     time_t st_ctime; //time of last change i-node 最近一次被更改的时间, 此参数会在文件所有者、组、 权限被更改时更新 
    15 };
    */
    //头文件
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    //定义获取文件大小函数
    void Get_File_Size()
    {
        //定义一个结构体
        struct stat buf;
        //读取文件,并用结构体取值
        int ret = stat("C:\\Users\\Administrator\\Desktop\\hello.txt", &buf);
        //打印文件的大小
        printf("文件大小为:%d\n", buf.st_size);
    }
    int main()
    {
        Get_File_Size();
        //程序暂停
        system("pause");
        //程序正常退出
        return 0;
    }

     

    展开全文
  • 获取指定文件大小

    struct stat用于获取指定路径文件夹和文件特定信息。

    1. 需要包含的头文件信息

    #include <sys/stat.h>

    2. 简要代码

    char* filepath = "..\\test.txt";
    struct stat info; 
    
    stat(FilePath.c_str(), &info); 
    
    int size = info.st_size;
    
    cout< <size< < endl;
    

     

    展开全文
  • linux下的stat函数是专门用来获取文件状态的API,需要一个结构体struct stat定义如下: struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* inode number...

    linux下的stat函数是专门用来获取文件状态的API,需要一个结构体struct  stat

    定义如下:

     struct stat {
                   dev_t     st_dev;         /* ID of device containing file */
                   ino_t     st_ino;         /* inode number */
                   mode_t    st_mode;        /* protection */
                   nlink_t   st_nlink;       /* number of hard links */
                   uid_t     st_uid;         /* user ID of owner */
                   gid_t     st_gid;         /* group ID of owner */
                   dev_t     st_rdev;        /* device ID (if special file) */
                   off_t     st_size;        /* total size, in bytes */
                   blksize_t st_blksize;     /* blocksize for filesystem I/O */
                   blkcnt_t  st_blocks;      /* number of 512B blocks allocated */
                 }
    
    其中st_size是文件大小,类型是off_t,其实就是long,在64位机下是8位,可以表示文件大小为2^63-1B,换算成G是8589934592GB,比1TB的硬盘都要大(在32位机下long是4位,最大能表示2G的文件,如果在32位机获取大于2G文件的大小,就很难处理)

    stat函数需要2个参数:一个是文件位置,struct stat变量用来返回文件信息;返回值-1失败,0成功

    #include <stdio.h>
    #include <sys/stat.h>
    
    int main(int argc, char *argv[])
    {
    	struct stat statbuff;
    	if( -1==stat("./Ubuntu-16.04.2.vdi", &statbuff) )
    	{
    		printf("stat wrong\n");
    	}
    	else
    	{
    		printf("stat success.%ld\n", statbuff.st_size);
    	}
    }
    6.3G的文件,结果如下图;

    在linux下获得文件大小还可以使用ftell函数,不过需要打开文件和移动文件指针,操作会麻烦一点。

    展开全文
  • struct stat64 s; memset(&s, 0, sizeof(struct stat64)); nRet = stat64(pchFilename, &s); if (nRet) { SK_ERROR(("stat %s failed! error_code: %s", pchFilename, strerror(errno))); return SK_FAILE

    (注意:

    1.部分平台不支持stat64


    2.获取文件大小的类型 off_t,


    在linux中off_t类型默认是32位的long int(4个字节)


    文件太大时可能会溢出。


    建议gcc编译时加上-D_FILE_OFFSET_BITS=64选项,


    off_t将会是8个字节的类型。


    3.获取文件大小,很多人会想到C语言的ftell函数,但该函数


    局限性很大,特别是对于大文件。)


    (1)函数的定义


    表头文件:    #include <sys/stat.h>
                         #include <unistd.h>
    定义函数:    int stat(const char *file_name, struct stat *buf);

    函数说明:   通过文件名filename获取文件信息,并保存在buf所指的结构体stat
    返回值:     执行成功则返回0,失败返回-1,错误代码存于errno
    错误代码:
        ENOENT         参数file_name指定的文件不存在
        ENOTDIR        路径中的目录存在但却非真正的目录
        ELOOP          欲打开的文件有过多符号连接问题,上限为16符号连接
        EFAULT         参数buf为无效指针,指向无法存在的内存空间
        EACCESS        存取文件时被拒绝
        ENOMEM         核心内存不足
        ENAMETOOLONG   参数file_name的路径名称太长



    (2)stat结构体


    struct stat {
        dev_t         st_dev;       //文件的设备编号
        ino_t         st_ino;       //节点
        mode_t        st_mode;      //文件的类型和存取的权限
        nlink_t       st_nlink;     //连到该文件的硬连接数目,刚建立的文件值为1
        uid_t         st_uid;       //用户ID
        gid_t         st_gid;       //ID
        dev_t         st_rdev;      //(设备类型)若此文件为设备文件,则为其设备编号
        off_t         st_size;      //文件字节数(文件大小)
        unsigned long st_blksize;   //块大小(文件系统的I/O缓冲区大小)
        unsigned long st_blocks;    //块数
        time_t        st_atime;     //最后一次访问时间
        time_t        st_mtime;     //最后一次修改时间
        time_t        st_ctime;     //最后一次改变时间(指属性)
    };
    先前所描述的st_mode则定义了下列数种情况:
        S_IFMT   0170000    文件类型的位遮罩
        S_IFSOCK 0140000    scoket
        S_IFLNK 0120000     符号连接
        S_IFREG 0100000     一般文件
        S_IFBLK 0060000     区块装置
        S_IFDIR 0040000     目录
        S_IFCHR 0020000     字符装置
        S_IFIFO 0010000     先进先出
        S_ISUID 04000     文件的(set user-id on execution)
        S_ISGID 02000     文件的(set group-id on execution)
        S_ISVTX 01000     文件的sticky
        S_IRUSR(S_IREAD) 00400     文件所有者具可读取权限
        S_IWUSR(S_IWRITE)00200     文件所有者具可写入权限
        S_IXUSR(S_IEXEC) 00100     文件所有者具可执行权限
        S_IRGRP 00040             用户组具可读取权限
        S_IWGRP 00020             用户组具可写入权限
        S_IXGRP 00010             用户组具可执行权限
        S_IROTH 00004             其他用户具可读取权限
        S_IWOTH 00002             其他用户具可写入权限
        S_IXOTH 00001             其他用户具可执行权限
        上述的文件类型在POSIX中定义了检查这些类型的宏定义:
        S_ISLNK (st_mode)    判断是否为符号连接
        S_ISREG (st_mode)    是否为一般文件
        S_ISDIR (st_mode)    是否为目录
        S_ISCHR (st_mode)    是否为字符装置文件
        S_ISBLK (s3e)        是否为先进先出
        S_ISSOCK (st_mode)   是否为socket
        若一目录具有sticky(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或root来删除或改名。

    使用stat函数最多的可能是ls-l命令,用其可以获得有关一个文件的所有信息。



    (3)其他相关函数



    函数都是获取文件(普通文件,目录,管道,socket,字符,块()的属性。
    函数原型
    #include <sys/stat.h>
    int stat(const char *restrict pathname, struct stat *restrict buf);
    提供文件名字,获取文件对应属性。


    int fstat(int filedes, struct stat *buf);
    通过文件描述符获取文件对应的属性。


    int lstat(const char *restrict pathname, struct stat *restrict buf);
    提供文件名字,获取文件属性。


    主要区别:


     fstat(int fd,struct stat *)接收的已open的文件描述符


    stat(char *filename,struct stat *)接收的路径名, 需要注意的是 能处理符号链接,但处理的是符号链接指向的文件。


    lstat(char *filename,struct stat *)接收的路径名  ,需要注意的是,也能能处理符号链接,但处理的是符号链接本身(自身)文件。 




    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #include <dirent.h>
    #include <errno.h>
    #include <sys/stat.h>
    
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <time.h>
    
    #if 1
    typedef struct stat Stat_t;
    #define StatFunc(x,y) stat(x,y)
    #else
    typedef struct stat64 Stat_t;  //部分平台不支持
    #define StatFunc(x,y) stat64(x,y)
    #endif
    
    int func(void)
    {
       char *filename ="binxu.rmvb" ;
       int nRet = 0;
       Stat_t s;
       time_t tTimeTmp = 0;
       struct tm stuTimeTmp;
       memset(&s, 0, sizeof(Stat_t));
       nRet = StatFunc(filename, &s);
       if (nRet)
       {
           printf("stat %s failed! error_code: %s", filename ,strerror(errno));
           return -1;
       }
    
       printf("\n s.st_size=%d,s.st_ctime=%d,s.st_mtime=%d,s.st_atime=%d \n",
              s.st_size,s.st_ctime,s.st_mtime,s.st_atime);
    
       if(s.st_size >0 )
       {
    		 printf("\n size ========%0.3lf KB  %0.3lf M   %0.3lf G ======\n",
              s.st_size/1024.0,s.st_size/1024.0/1024.0,s.st_size/1024.0/1024.0/1024.0);
       }
    
       memset(&stuTimeTmp,0,sizeof(struct tm));
       tTimeTmp = (s.st_ctime);
       //struct tm *gmtime_r(const time_t *timep, struct tm *result);
       (void *)gmtime_r(&tTimeTmp,&stuTimeTmp);
     
    	printf("\n create time** %d-%d-%d  %d:%d:%d **\n",
    		stuTimeTmp.tm_year + 1900,
    		stuTimeTmp.tm_mon + 1,
    		stuTimeTmp.tm_mday,
    		stuTimeTmp.tm_hour,
    		stuTimeTmp.tm_min,
    		stuTimeTmp.tm_sec );
        
       return 0;
    }
      
    int main()  
    {  
        func();
    }
    
    
    
    






    stat获取到的文件属性的时间值是UTC时间。


    在windows下看文件属性,时间+8北京时区刚好。





    (4)利用stat 的属性判断属于是否属于同一挂载目录下的文件夹或者是否是同一设备


    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #include <dirent.h>
    #include <errno.h>
    #include <sys/stat.h>
    
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <time.h>
    
    #if 1
    typedef struct stat Stat_t;
    #define StatFunc(x,y) stat(x,y)
    #else
    typedef struct stat64 Stat_t;  //部分平台不支持
    #define StatFunc(x,y) stat64(x,y)
    #endif
    
    int func(char *pchFilename)
    {
       int nRet = 0;
       Stat_t stuStat;
       dev_t mountDevice;
       
       if(NULL == pchFilename || 0 == strlen(pchFilename))
       {
    		return -1;
       }
       
       memset(&stuStat, 0, sizeof(Stat_t));
       nRet = StatFunc(pchFilename, &stuStat);
       if (nRet)
       {
           printf("stat %s failed! error_code: %s", pchFilename ,strerror(errno));
           return -1;
       }
    
    	printf("\n\n**************filepath[%s]***************	",pchFilename);
    
    	printf("\n (stuStat.st_mode & S_IFMT) == S_IFBLK  result is %d  ",(stuStat.st_mode & S_IFMT) == S_IFBLK);
       
       if ((stuStat.st_mode & S_IFMT) == S_IFBLK)
    	{
    	    mountDevice = stuStat.st_rdev; // //(设备类型)若此文件为设备文件,则为其设备编号
    	}
    	else
    	{
    		mountDevice = stuStat.st_dev;     //文件的设备编号
    	}
    
    	printf("\n st_rdev[%llu]  st_dev[%llu] st_ino[%lu]\n", stuStat.st_rdev,stuStat.st_dev,stuStat.st_ino );
    	
       return 0;
    }
      
    int main()  
    {  
        func("/share/111/");
    	func("/share/111/222/");
    	func("/");
    	
    	func("/dev/sda1");
    	func("/dev/sda2");
    	func("/dev/sda5");
    
    }
    
    



    属于设备的,如/dev/sda1,(stuStat.st_mode & S_IFMT) == S_IFBLK条件为真,此时比较是否为同一设备,应该比较st_rdev属性

    属于文件夹的,(stuStat.st_mode & S_IFMT) == S_IFBLK条件为假,判断是否同一个挂载点时,应该比较st_dev属性。



    展开全文
  • linux 用stat 函数来查看文件大小

    千次阅读 2019-07-13 12:02:54
    stat 函数讲解 表头文件: #include <sys/stat.h> #include <unistd.h> ...定义函数: int stat(const char *file_name, ...函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中 ...
  • 各位,我打算用stat里面的st-size 函数获取文件大小,但是怎么调试得到的值就是0. ``` int main (void) { char *fileName = "abcd.txt"; SM_FileHandle fh; createPageFile(fileName); openPageFile ...
  • #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <fcntl.h>.../*********************************************************************... //文件的设备编号 ino_t s.
  • 通过_stat结构体获取文件大小

    千次阅读 2010-11-07 13:25:00
    <br />获取文件大小,使用到_stat结构体,用_stat函数取得数据。 struct _stat ST;  _stat("C://xxx.iso", &ST);  ST.st_size 为文件大小(Byte)。 当文件超过4GB时, char file...
  • 各位,我用fopen创建一个bin文件并写入数据,但是用 fileStat.st_size 发现 filesize结果总是0,请哪位大神可以解答 ``` int main(void){ FILE *pageFile; pageFile = fopen("abc.bin","w+"); fwrite(...
  • stat 函数 头文件: #include <sys/stat.h> #include <unistd.h> 用法: filename:为想要操作的文件的名字。 stat(fileName, &stBuf); fileSize = stBuf.st_size;
  • 背景 ...Linux 的文件系统保存有三个时间戳,利用 stat 指令查看文件信息可以获取。他们分别是 ATime、MTime 和 CTime [root@192-168-199-198 backups]# stat 2.txt File: ‘2.txt' Size: 16 Bl
  • 作者:朱金灿 ... 使用stat函数获取文件大小代码如下: #include <sys/stat.h> #include <errno.h> void TestDiskSpace() { struct stat buf; int errno = stat("E:\\TestDat...
  • Linux 下有如下API 可以用来获取文件相关信息,譬如文件大小,修改时间等; #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *pathname, struct ...
  • sys/stat.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(int argc, const char* argv[]) { if(argc < 2) { fprintf(stderr, "%s <filename>\n", ...
  • int stat(const char *path, struct stat *buf); 2.函数结构体 struct stat { dev_t st_dev; /* ID of device containing file / ino_t st_ino; / inode number / mode_t st_mode; / protection / nlink_t st_...
  • C获取文件大小stat()

    2009-12-30 11:26:00
    stat - get file status SYNOPSIS #include <sys/stat.h>int stat(const char *restrict path, struct stat *restrict buf); DESCRIPTION The stat() function shall obtain information abo...
  • 当我们用ln -s 去软链接一个文件时,如果用stat 去查看这个链接文件的属性,则它指向的是链接文件指向的原文件的属性; 而用lstat 则可以读取到链接文件本身的属性。 2. fstat 和 stat 的区别 int fstat(int fd,...
  • LINUX C获取文件大小

    千次阅读 2015-09-20 10:02:21
    在我们学习生活中经常会遇到问题和困难,就比如说我们在学习Linux时,比如怎样Linux获取文件大小的方法。前几天在工作中需要写一段代码,获取一些视频文件的大小,心想:这还不简单吗?直接用标准C的文件操作函数就...
  • nodejs 中读取文件状态;fs.stat()方法

    千次阅读 2018-11-29 17:16:39
    原文:... var fs = require("fs"); /*  读取文件的状态;  fs.stat(path,callback);  callback有两个参数;err,stats;stats是一个fs.Stats对象;  如果发生错误err.code是常见错误...
  • C语言获取文件大小

    千次阅读 2020-03-24 15:47:57
    获得文件大小需要用到2个函数:fseek(),ftell(),介绍如下:  fseek()函数:  原型:intfseek(FILE *stream, long offset, int fromwhere);  参数:  stream: 第一个参数stream为文件指针  offset ...
  • shell 获取单个文件大小

    千次阅读 2017-12-22 10:22:39
    name=file.txt  size=`stat -c "%s" $name` echo $size
  • C语言获取文件大小

    千次阅读 2019-03-11 14:37:37
    在C语言库函数中有stat函数,可以获取文件的基本信息,其中就有文件大小。 1 2 3 4 5 6 7 8 9 #include&lt;sys/stat.h&gt;//包含头文件。 intfile_...
  • c语言获取文件 大小 How to get a file’s size in C? 如何在C中获取文件大小? If you have the file stream (FILE * f): 如果您有文件流(FILE * f): fseek(f, 0, SEEK_END); // seek to end of file size =...
  • 在linux下获取一个指定文件大小(字节为单位)的代码。查了一下发现是使用系统调用stat来实现,那么如何使用C语言或C++语言来写一个通用的函数来获取指定文件大小的函数呢?
  • 之前获取文件大小总是用死办法,open一个文件,然后lseek,read这样去获取文件的大小,这样的效率实在是低,还有可能粗心大意还会出错。 一次偶然在Android的源代码中看到获取文件大小的函数,在以下范例中。用fstat...
  • 前面我们初步认识了stat这个函数,并用它学会了查看文件的大小:linux 用stat 函数来查看文件大小; 现在我们来再看看stat 结构体中的st_mode 成员,st_mode 其实是2byte的16bit的数,下面是用八进制表示的st_mode ...
  • C语言stat(),fstat()函数:获取文件状态 转载来源:http://see.xidian.edu.cn/cpp/html/326.html 相关函数:fstat, lstat, chmod, chown, readlink, utime 头文件:#include <sys/stat.h> #include <...
  • python中获取文件大小We can get file size in Python using the os module. 我们可以使用os模块在Python中获取文件大小。 Python中的文件大小 (File Size in Python) The python os module has stat() function ...
  • 相关函数:fstat, lstat, chmod, chown, readlink, utime 头文件:#include<sys/stat.h> #include<uninstd.h> 定义函数:int stat(const char ...函数说明:stat()用来将参数file_name 所指的文件状态...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,014
精华内容 23,605
关键字:

stat获取文件大小