如何用C语言获取文件的大小
2015-10-19 15:05
549 查看
如何用C语言获取文件的大小
今天看项目的代码过程中发现在linux下获取一个指定文件大小(字节为单位)的代码。查了一下发现是使用系统调用stat来实现,而这引起了我的兴趣,我发现在window下貌似没有提供这样的系统调用(不包括MFC),那么如何使用C语言或C++语言来写一个通用的函数来获取指定文件大小的函数呢?查了一下发现同C语言的文件操作函数便可以很容易的实现这样的功能。在自己实现的函数中使用到的函数就只有fseek和ftell。它们的说明如下:
fseek
语法:
#include <stdio.h> int fseek( FILE *stream, long offset, int origin ); |
名称 | 说明 |
SEEK_SET | 从文件的开始处开始搜索 |
SEEK_CUR | 从当前位置开始搜索 |
SEEK_END | 从文件的结束处开始搜索 |
ftell
语法:
#include <stdio.h> long ftell( FILE *stream ); |
至于stat调用,请详见:http://www.360doc.com/content/11/0110/16/4559801_85509847.shtml
代码如下:
[cpp] view
plaincopy
/*
FileName: getFileName.cpp
Author: ACb0y
Create Time: 2011年2月12日20:45:31
Last modify Time: 2011年2月12日20:47:21
*/
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
/*
函数名:getFileSize(char * strFileName)
功能:获取指定文件的大小
参数:
strFileName (char *):文件名
返回值:
size (int):文件大小
*/
int getFileSize(char * strFileName)
{
FILE * fp = fopen(strFileName, "r");
fseek(fp, 0L, SEEK_END);
int size = ftell(fp);
fclose(fp);
return size;
}
/*
函数名:getFileSizeSystemCall(char * strFileName)
功能:获取指定文件的大小
参数:
strFileName (char *):文件名
返回值:
size (int):文件大小
*/
int getFileSizeSystemCall(char * strFileName)
{
struct stat temp;
stat(strFileName, &temp);
return temp.st_size;
}
int main()
{
printf("size = %d/n", getFileSize("getFileSize.cpp"));
printf("size = %d/n", getFileSizeSystemCall("getFileSize.cpp"));
return 0;
}
运行结果如下:
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- 轻量级的C语言面向对象编程框架(约100行代码)
- 记录几个C++多继承中,this指针与多虚表间编译与处理的疑问,看编译器的行为。
- c++中ifstream一次读取整个文件
- [C++] printf pitfall
- C语言remove()函数:删除文件或目录
- 猴子吃桃(C语言)
- C/C++单元测试工具列表
- C/C++:结构体常见错误
- C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)
- [C++] Swap Two Num
- VS编译时出现error C4996 解决方法
- C语言文件读写操作总结
- 关于C++中类类型转换操作符总结
- C++primer学习:拷贝控制(3)
- 谈谈自己对C语言中函数指针的一些理解 (第一次写博客,有点小兴奋哈)
- C++:如何用clock()和头文件ctime来创建延迟循环
- 再看c语言-算法
- C++第八课 局部变量和全局变量
- C语言值传递,C语言地址传递
- 使用 Android NDK 的交叉编译工具链移植 C/C++ 项目到安卓平台