C语言如何获取文件信息?stat这个函数如何使用? - C / C++ -

作者&投稿:衷所 (若有异议请与网页底部的电邮联系)
C语言 stat()函数获得文件大小需不需要打开文件?就是stat()函数是怎么获得文件的大小的?~

stat函数不需要,只要文件名就行(你的文件在当前路径下,要不还需将路径名加上),int state(const char * path,struct stat *buf);这是函数原型。在struct state这个结构体中有个st_size这个变量,他就是文件大小的变量。具体你可以查一下man手册。与它类似的还有一个fstat,他需要open文件得到文件描述符。

使用文件操作函数fscanf即可提取文本当中特定的信息。例如要提取一个整数,可以用fscanf(fp,"%d",&n);要提取一个字符串可以用fscanf(fp,"%s",s),其中fp为文件指针。
1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。2、例程:
#includeint a;char b,c[100];int main(){ FILE * fp1 = fopen("input.txt", "r");//打开输入文件 FILE * fp2 = fopen("output.txt", "w");//打开输出文件 if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出 puts("不能打开文件!"); return 0; } fscanf(fp1,"%d",&a);//从输入文件读取一个整数 b=fgetc(fp1);//从输入文件读取一个字符 fgets(c,100,fp1);//从输入文件读取一行字符串 printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数 fputs(c,fp2);//向输出文件写入一行字符串 fputc(b,fp2);//向输出文件写入一个字符 fprintf(fp2,"%d",a);//向输出文件写入一个整数 fclose(fp1);//关闭输入文件 fclose(fp2);//关闭输出文件,相当于保存 return 0;}

stat(取得文件状态)
相关函数 fstat,lstat,chmod,chown,readlink,utime

表头文件 #include <sys/stat.h>
#include <unistd.h>

定义函数 int stat(const char * file_name,struct stat *buf);

函数说明 stat()用来将参数file_name所指的文件状态,复制到参数buf所指的结构中。
下面是struct stat内各参数的说明
struct stat
{
dev_t st_dev; /*device*/
ino_t st_ino; /*inode*/
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 type */
off_t st_size; /*total size, in bytes*/
unsigned long st_blksize; /*blocksize for filesystem I/O */
unsigned long st_blocks; /*number of blocks allocated*/
time_t st_atime; /* time of lastaccess*/
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last change */
};
st_dev 文件的设备编号
st_ino 文件的i-node
st_mode 文件的类型和存取的权限
st_nlink 连到该文件的硬连接数目,刚建立的文件值为1。
st_uid 文件所有者的用户识别码
st_gid 文件所有者的组识别码
st_rdev 若此文件为装置设备文件,则为其设备编号
st_size 文件大小,以字节计算
st_blksize 文件系统的I/O 缓冲区大小。
st_blcoks 占用文件区块的个数,每一区块大小为512 个字节。
st_atime 文件最近一次被存取或被执行的时间,一般只有在用mknod、utime、read、write与tructate时改变。
st_mtime 文件最后一次被修改的时间,一般只有在用mknod、utime和write时才会改变
st_ctime i-node最近一次被更改的时间,此参数会在文件所有者、组、权限被更改时更新先前所描述的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来删除或改名。

返回值 执行成功则返回0,失败返回-1,错误代码存于errno

错误代码 ENOENT 参数file_name指定的文件不存在
ENOTDIR 路径中的目录存在但却非真正的目录
ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接
EFAULT 参数buf为无效指针,指向无法存在的内存空间
EACCESS 存取文件时被拒绝
ENOMEM 核心内存不足
ENAMETOOLONG 参数file_name的路径名称太长

范例 #include <sys/stat.h>
#include <unistd.h>
mian()
{
struct stat buf;
stat (“/etc/passwd”,&buf);
printf(“/etc/passwd file size = %d /n”,buf.st_size);
}

再给你一个例子吧[ol][*]#include [*]#include [*]#include [*]#include [*][*]int main(void)[*]{[*]? ?struct _stat buf;[*]? ?int result;[*][*]? ?/* Get data associated with \"filename.c\": */[*]? ?result = _stat(\"filename.c\", &buf); [*][*]? ?/* Check if statistics are valid: */[*]? ?if(result != 0)[*]? ?? ?perror(\"Problem getting information\");[*]? ?else[*]? ?{[*]? ?? ?/* Output some of the statistics: */[*]? ?? ?printf(\"File size? ???: %ld\\n\", buf.st_size);[*]? ?? ?printf(\"Drive? ?? ?? ?: %c:\\n\", buf.st_dev + \'A\');[*]? ?? ?printf(\"Time modified : %s\", ctime( &buf.st_atime));[*]? ?}[*][*]? ?return 0;[*]}[/ol]


如何读取文件的编码信息 c语言
UTF-8是一种多字节编码的字符集,表示一个Unicode字符时,它可以是1个至多个字节,在表示上有规律:1字节:0xxxxxxx 2字节:110xxxxx 10xxxxxx 3字节:1110xxxx 10xxxxxx 10xxxxxx 4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 这样就可以根据上面的特征对字符串进行遍历来判断一个字符串是不是UTF...

C语言中struct_finddata_t Filelnfo是什么意思啊?
struct_finddata_t是一个结构体,这个结构体是用来存储文件各种信息的, fileinfo是文件信息结构体的指针。找到文件后,函数将该文件信息放入此结构体中。

c# 如何获取文件属性详细信息页所有信息。获取像右键属性里的一样,有...
注释 Comments公司名称 CompanyName文件名称 FileName文件版本 FileVersion内部名称 InternalName调试版本 IsDebug补丁版本 IsPatched语言 Language版权 LegalCopyright商标 LegalTrademark原始文件名称 OriginalFilename产品名称 ProductName产品版本 ProductVersion但这显然不全,其余的要想获取到,只能引用 Shell32 或...

怎样在c语言中修改已录入的文件信息,谢谢
用FILE定义文件指针 FILE fp;fp=fopen("文件名","a");\/\/往原文件追加数据 fp=fopen("文件名","w");\/\/重建文件,采用这种方式之前你应该将原文件中的数据都存储到内存中 操作完毕后应该用fclose(fp);关闭文件,否则会丢失数据

c语言录入文件信息时如何确定某一学号的人已存在
int insert2File(char path[]);\/\/ 向文件末尾插入一条学生信息 SINFO * selectALLFILE(char path[]);\/\/只读模式打开文本,获取信息, 返回信息链表头节点(该函数单独调用的话,记得调用freeSINFOS释放内存)int checkSN(SINFO sinfo,char path[]);\/\/检查路径下文件中,学号是否存在,存在返回1,...

用c语言如何读取和保存jpg图片文件?
include <stdio.h> include <stdlib.h> include <windows.h> int file_size(char* filename)\/\/获取文件名为filename的文件大小。{ FILE *fp = fopen(filename, "rb");\/\/打开文件。int size;if(fp == NULL) \/\/ 打开文件失败 return -1;fseek(fp, 0, SEEK_END);\/\/定位文件指针到文件...

C语言中如何把文件里中括号的内容读取出来
3 每对()必须严格匹配 不然结果会出现错误 4 ()必须是英文标点,中文()将不被识别 5 如果()中无内容,将被忽略 代码如下 include <stdio.h> include <string.h> include <malloc.h> define FILE_NAME "input.txt"char item[1000][20];int main(){ FILE *fp;char *buffer;int file_...

go语言方法和函数(go语言chan)
Go语言文件操作 本文主要介绍了Go语言中文件读写的相关操作。 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。 os.Open()函数能够打开一个文件,返回一个*File和一个err。对得到的文件实例调用close()方法能够关段燃闭文件。 为了防止文件忘记关闭,我们通常使用...

怎样使用C语言列出某个目录下的文件?
C语言本身没有提供象dir_list()这样的函数来列出某个目录下所有的文件。不过,利用C语言的几个目录函数,你可以自己编写一个dir_list()函数。首先,头文件dos.h定义了一个find_t结构,它可以描述DOS下的文件信息,包括文件名、时间、日期、大小和属性。其次,C编译程序库中有_dos_findfirst()和_dos...

如何从MDB格式的文件中 提取需要的文本信息
目前手里有一套C语言考试系统的数据库,??只有数据库::?没有相对应的C语言软件?那数据库怎么来的啊,如果有软件源码的化可以从源码中找到读取数据库试题的部分,看是从哪个表的哪个列读取的,然后打开数据库找找就成了。要是没有数据库源码,就只能去数据库中找那个最大的表,CONTENT 或者 跟...

滨城区15650792148: C语言如何获取文件信息?stat这个函数如何使用? - C / C++ --
阙详降脂: stat(取得文件状态) 相关函数 fstat,lstat,chmod,chown,readlink,utime 表头文件 #include#include定义函数 int stat(const char * file_name,struct stat *buf); 函数说明 stat()用来将参数file_name所指的文件状态,复制到参数buf所指的结构中...

滨城区15650792148: C语言关于获得stat函数的文件信息实例 -
阙详降脂: argc是指输入参数的个数 如果程序执行时不带参数就argc 就等于1 带一个参数argc就等于2这个程序的作用就是输入文件名得到文件的状态信息. 如果你编译出a.out 你需要这样执行 a.out filename 后面带一个参数是文件名 如果你不带参数他就返回了

滨城区15650792148: 如何用C语言获取文件的大小 -
阙详降脂: c语言可以通过stat()函数获得文件属性,通过返回的文件属性,从中获取文件大小.#include <sys/stat.h> 可见以下结构体和函数 struct stat { _dev_t st_dev; _ino_t st_ino; unsigned short st_mode; short st_nlink; short st_uid; short st_gid; _dev_t ...

滨城区15650792148: C语言 stat()函数获得文件大小需不需要打开文件?就是stat()函数是怎么获得文件的大小的?
阙详降脂: stat函数不需要,只要文件名就行(你的文件在当前路径下,要不还需将路径名加上),int state(const char * path,struct stat *buf);这是函数原型.在struct state这个结构体中有个st_size这个变量,他就是文件大小的变量.具体你可以查一下man手册.与它类似的还有一个fstat,他需要open文件得到文件描述符.

滨城区15650792148: C语言 stat()这个函数是怎样实现的? -
阙详降脂: 简单的说,文件的相关信息会记录在文件系统里,stat 只要读一下就可以了.都不用访问文件本身.文件系统的逻辑结构还是应该了解一下,因为在编程的过程中会频繁用到.

滨城区15650792148: C语言 提取文件信息 -
阙详降脂: #include <sys\stat.h>#include <stdio.h>#include <time.h> int main(int argc, char* argv[]) { struct stat statbuf; FILE *stream; char filename[30]; printf("please input the file's name."); scanf("%s",filename); //打开输出文件 if((stream = fopen(...

滨城区15650792148: 在C语言中能不能通过函数获取一个文件的属性信息?
阙详降脂: 标准C语言里面好像没有.这是Windows方面的,需要用API函数.

滨城区15650792148: c语言读取文件数据时,有三种方式 -
阙详降脂: 格式化输入,例如fscanf()字符输入,例如fgetc()读取字符 直接输入,例如fread()从文件中读取二进制数据

滨城区15650792148: 在c语言中,如何读取一个txt文件中的信息 -
阙详降脂: 一般来说在C语言中读取txt文件的信息有两种方法,一种是使用C语言标准文件I/O中的fopen()、fread()等等函数,一种是调用操作系统中的API函数,比如Windows上的ReadFile()、OpenFile()等等,现在操作系统一般都具备内存文件映射功能...

滨城区15650792148: C语言编程怎样从文件中提取信息 -
阙详降脂: 如果你对编程语言没有要求的话,我建议这类问题用perl或者其他脚本语言处理比较简单明了.找出数据其实完全可以用是fscanf,再不行,你直接一个字符一个字符,遇到第几个空格,什么的数据不就区分开了么.指针好像是一种数据类型,没有调用这一说,你能说清楚一些你想要表达的意思么.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网