linux批量读取⽂件⼤⼩,如何⽤C语⾔获取⽂件的⼤⼩
今天看项⽬的代码过程中发现在linux下获取⼀个指定⽂件⼤⼩(字节为单位)的代码。查了⼀下发现是使⽤系统调⽤stat来实现,⽽这引起了我的兴趣,我发现在window下貌似没有提供这样的系统调⽤(不包括MFC),那么如何使⽤C语⾔或C++语⾔来写⼀个通⽤的函数来获取指定⽂件⼤⼩的函数呢?
查了⼀下发现同C语⾔的⽂件操作函数便可以很容易的实现这样的功能。在⾃⼰实现的函数中使⽤到的函数就只有fseek和ftell。它们的说明如下:
fseek
语法:
#include
int fseek( FILE *stream, long offset, int origin );
函数fseek()为给出的流设置位置数据. origin的值应该是下列值其中之⼀(在stdio.h中定义):
名称 说明
SEEK_SET 从⽂件的开始处开始搜索
SEEK_CUR 从当前位置开始搜索
SEEK_END 从⽂件的结束处开始搜索
fseek()成功时返回0,失败时返回⾮零. 你可以使⽤fseek()移动超过⼀个⽂件,但是不能在开始处之前. 使⽤fseek()清除关联到流的EOF标记.
linux怎么读取文件ftell
语法:
#include
long ftell( FILE *stream );
ftell()函数返回stream(流)当前的⽂件位置,如果发⽣错误返回-1.
代码如下:
/*
FileName: getFileName.cpp
Author: ACb0y
Create Time: 2011年2⽉12⽇20:45:31
Last modify Time: 2011年2⽉12⽇20:47:21
*/
#include
#include
#include
/*
函数名: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;
}
运⾏结果如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论