C语言中获取文件大小方式有很多,在不使用任何系统命令,仅使用C自身库函数情况下,常用方式有两种:
一、获取文件系统属性,读取文件大小。
在C语言库函数中有stat函数,可以获取文件的基本信息,其中就有文件大小。
#include <sys/stat.h>//包含头文件。int file_size(char* filename)//获取文件名为filename的文件大小。
{
struct stat statbuf
int ret
ret = stat(filename,&statbuf)//调用stat函数
if(ret != 0) return -1//获取失败。
return statbuf.st_size//返回文件大小。
}
二、通过C语言文件 *** 作,获取文件大小。
以fopen打开的文件,通过fseek可以定位到文件尾,这时使用ftell函数,返回的文件指针偏移值,就是文件的实际大小。
代码如下:
#include <stdio.h>//包含头文件。int file_size(char* filename)//获取文件名为filename的文件大小。
{
FILE *fp = fopen(filename, "rb")//打开文件。
int size
if(fp == NULL) // 打开文件失败
return -1
fseek(fp, 0, SEEK_END)//定位文件指针到文件尾。
size=ftell(fp)//获取文件指针偏移量,即文件大小。
fclose(fp)//关闭文件。
return size
}
三、注意事项:
第一种方式为直接读取文件信息,无需打开文件,所以更高效。
四、测试代码:
以上接口函数,均可以用如下主函数测试:
#include <stdio.h>int main()
{
char s[100]
int size
scanf("%s",s)//输入文件名
size = file_size(s)//获取文件大小。
if(size == -1) printf("无法获取文件大小,可能文件并不存在或不可读\n")
else printf("文件大小为%d\n", size)
return 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
}
告诉你一个最方便的函数:stat,例:struct stat fileData
if (0 == stat("C:\log.txt", &fileData))
{
printf("file size %u.", fileData.st_size)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)