如何用C语言获取文件的大小

如何用C语言获取文件的大小,第1张

C语言中获取文件大小方式有很多,在不使用任何系统命令,仅使用C自身库函数情况下,常用方式有两种:

一、获取文件系统属性,读取文件大小

在C语言库函数中有stat函数,可以获取文件的基本信息,其中就有文件大小。

#include <sys/stat.h>//包含头文件。

int file_size(char* filename)//获取文件名为filename的文件大小。

{

    struct stat statbuf

    int ret

    ret = stat(filename,&statbuf)//调用stat函数

    if(ret != 0) return -1//获取失败。

    return statbuf.st_size//返回文件大小。

}

二、通过C语言文件 *** 作,获取文件大小。

以fopen打开的文件,通过fseek可以定位到文件尾,这时使用ftell函数,返回的文件指针偏移值,就是文件的实际大小。

代码如下:

#include <stdio.h>//包含头文件。

int file_size(char* filename)//获取文件名为filename的文件大小。

{

    FILE *fp = fopen(filename, "rb")//打开文件。

    int size

    if(fp == NULL) // 打开文件失败

        return -1

    fseek(fp, 0, SEEK_END)//定位文件指针到文件尾。

    size=ftell(fp)//获取文件指针偏移量,即文件大小。

    fclose(fp)//关闭文件。

    return size

}

三、注意事项:

第一种方式为直接读取文件信息,无需打开文件,所以更高效。

四、测试代码:

以上接口函数,均可以用如下主函数测试:

#include <stdio.h>

int main()

{

    char s[100]

    int size

    scanf("%s",s)//输入文件名

    size = file_size(s)//获取文件大小。

    if(size == -1) printf("无法获取文件大小,可能文件并不存在或不可读\n")

    else printf("文件大小为%d\n", size)

    return 0

}

用以下的方法可以获取一个文件的字节数:

先用fopen打开文件,然后把文件指针指向文件尾.

再用ftell获得文件指针当前位置(即文件长度).

源代码:

#include "stdafx.h"

#include <stdio.h>

#include <iostream>

using namespace std

int main()

{

FILE* fp = NULL

int nFileLen = 0

fp = fopen("c:/Test.txt", "rb")

if (fp == NULL)

{

cout <<"can't open file" <<endl

return 0

}

fseek(fp,0,SEEK_END)//定位到文件末

nFileLen = ftell(fp)//文件长度

cout <<"file len = " <<nFileLen <<endl

return 0

}

可以用 stat (win 下 _stat)函数直接得文件尺寸。

man 2 stat

1.MFC中的方法:(C++)

CFileStatus status

CFile::GetStatus("D:\\test.txt",status)

long lSizeOfFile

lSizeOfFile = status.m_size

lSizeOfFile的值就是D:\\test.txt文件的大小

2.标准C获得文件大小的5种方法

(注意:"__FILE__"指的是当前文件,你可以改为有效路径的目标文件,比如"D:\\test.txt")

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 blocks allocated */

time_t st_atime/* time of last access */

time_t st_mtime/* time of last modification */

time_t st_ctime/* time of last status change */

}

#include "stdafx.h"

#include "stdio.h"

#include <sys/stat.h>

#include <io.h>

#include <FCNTL.H>

int getfilesize()

{

int iresult

struct _stat buf

iresult = _stat(__FILE__,&buf)

if(iresult == 0)

{

return buf.st_size

}

return NULL

}

int getfilesize01()

{

int fp

fp=_open(__FILE__,_O_RDONLY)

if(fp==-1)

return NULL

return _filelength(fp)

//return NULL

}

int getfilesize02()

{

int fp

fp=_open(__FILE__,_O_RDONLY)

if(fp==-1)

return NULL

return _lseek(fp,0,SEEK_END)

//return NULL

}

int getfilesize03()

{

int fp

fp=_open(__FILE__,_O_RDONLY)

if(fp==-1)

return NULL

return _lseek(fp,0,SEEK_END)

//return NULL

}

int getfilesize04()

{

FILE *fp

if((fp=fopen(__FILE__,"r"))==NULL)

return 0

fseek(fp,0,SEEK_END)

return ftell(fp)//return NULL

}

int getfilesize05()

{

FILE *fp

char str[1]

if((fp=fopen(__FILE__,"rb"))==NULL)

return 0

for(int i = 0!feof(fp)i++)

{

fread(&str,1,1,fp)

}

return i - 1//return NULL

}

int main(int argc, char* argv[])

{

printf("getfilesize()=%d\n",getfilesize())

printf("getfilesize01()=%d\n",getfilesize01())

printf("getfilesize02()=%d\n",getfilesize02())

printf("getfilesize03()=%d\n",getfilesize03())

printf("getfilesize04()=%d\n",getfilesize04())

printf("getfilesize05()=%d\n",getfilesize05())

return 0

}

告诉你一个最方便的函数:stat,例:

struct stat fileData

if (0 == stat("C:\log.txt", &fileData))

{

printf("file size %u.", fileData.st_size)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11594482.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存