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

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

intfile_size(char*filename)

{

FILE*fp=fopen(filename,"r")

if(!fp)return-1

fseek(fp,0L,SEEK_END)

intsize=ftell(fp)

fclose(fp)

returnsize

}

扩展资料

C语言获取文件长度及全部内容

FILE*fp

fp=fopen("localfile","rb")//localfile文件名

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

flen=ftell(fp)/*得到文件大小*/

p=(char*)malloc(flen+1)/*根据文件大小动态分配内存空间*/

if(p==NULL)

{

fclose(fp)

return0

}

fseek(fp,0L,SEEK_SET)/*定位到文件开头*/

fread(p,flen,1,fp)/*一次性读取全部文件内容*/

p[flen]=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

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存