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

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

/*  解题思路: 以只读方式打开某一文件,然后将文件指针定位在文件结尾的位置,利用ftell函数返回指针的在文件中的相对位置即可。

*/

#include "stdio.h"

main()

{ FILE *fp   /*定义文件指针*/

  long cnt   /*定义变量cnt用来存储文件大小数据*/

  fp=fopen("c:\\1.txt","r")   /*此处请填写测试文件的地址,并以只读("r")方式打开文件*/

  if( fp==NULL )  /*如果打开的文件不存在,则退出*/

     { exit(0)

       printf("文件打开失败!")

     }

  fseek(fp,0L,SEEK_END)   /*利用fseek函数将指针定位在文件结尾的位置*/

  cnt=ftell(fp)   /*利用ftell函数返回指针相对于文件开头的位置,以字节计算*/

  printf("文件所占的字节数为%ld个\n",cnt)   /*进行输出*/

}

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

先用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/11535382.html

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

发表评论

登录后才能评论

评论列表(0条)

保存