前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C得到文件的大小

C得到文件的大小

作者头像
cloudskyme
发布2018-03-20 11:05:01
1.2K0
发布2018-03-20 11:05:01
举报
文章被收录于专栏:cloudskymecloudskyme

先用fopen打开文件,然后把文件指针指向文件尾. 再用ftell获得文件指针当前位置(即文件长度).

源代码:

代码语言:javascript
复制

#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")

代码语言:javascript
复制

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;
} 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-01-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档