C得到文件的大小

时间:2022-05-04
本文章向大家介绍C得到文件的大小,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

先用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()=%dn",getfilesize());
printf("getfilesize01()=%dn",getfilesize01());
printf("getfilesize02()=%dn",getfilesize02());
printf("getfilesize03()=%dn",getfilesize03());
printf("getfilesize04()=%dn",getfilesize04());
printf("getfilesize05()=%dn",getfilesize05());
return 0;
}