C得到文件的大小-阿里云开发者社区

开发者社区> skyme张> 正文

C得到文件的大小

简介: 先用fopen打开文件,然后把文件指针指向文件尾. 再用ftell获得文件指针当前位置(即文件长度). 源代码:#include "stdafx.h"#include #include using namespace std; int main(){FILE* fp = NULL;int nFileLen = 0; fp = fopen("c:/Test.
+关注继续查看

先用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;
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【温故而知新】C++中类的大小与其继承关系
【本文参考微信公众号:“程序猿”,账号:imkuqin,原文链接】 1、空类: //NullClass.h #pragma once class CNullClass { }; 查看CNullClass实例的大小: int...
831 0
关于NOR_FLASH的大小在单片机程序中的应用
在单片机开发中,NOR_FLASH常用的有4M和8M的大小: 4M的FLASH在程序中可以这样表示:Ptr < 0x220000 8M的FLASH在程序中可以这样表示:Ptr < 0x400000(最大只能读到0x3fffff) 有了这个关系,在判断NOR_FLASH好坏的方法上我们可以采用计算checksum的方式来校验。
649 0
10.C++(文件流,标准模板库)
(创建于2018/1/1) #include #include using namespace std; //操作文本文件 void writereadtext() { //写入文本到一个文件中并创建这个文件,然后读取写入的内容显示到控制台 char* fname = "D://renzhenming.
786 0
C# 如何获取某个类型或类型实例对象的大小
原文:C# 如何获取某个类型或类型实例对象的大小 在统计类型或类型实例对象时,出了个异常: “不能作为非托管结构进行封送处理;无法计算有意义的大小或偏移量。”   后来查了一下,原来,我们创建的struct或是class都是属于复杂类型的。
1340 0
Dev C++多文件编译问题
当需要在主程序中使用以声明的类则是在main()前插入使用类的声明的文件即可 这样做的条件是你把类的.cpp文件编译成库, 然后编译main()文件时把库连接进去。
795 0
+关注
236
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载