您的位置:首页 > 运维架构 > Linux

linux下怎样得到文件的大小

2007-12-03 15:37 363 查看
1.SHELL
//得到已经使用的磁盘空间,以字节为单位
#ifdef _LINUX
sprintf(cmd, "cd %s;find . -name /"*.*/"|xargs ls -l|awk '{size+=$5}END{print size}'",
str_FilePath.c_str());
//sprintf(cmd, "du -s %s|awk '{print $1}'", str_FilePath.c_str());
#endif

if ((fp = popen(cmd, "r")) != NULL)
{
fgets(cmd, sizeof(cmd), fp);
}
else
{
LOG(NULL, 0, "SHELL ERROR:cd %s;find . -name /"*.*/"|xargs ls -l|awk '{size+=$5}END{print size}'");
cout <<"SHELL ERROR:cd %s;find . -name /"*.*/"|xargs ls -l|awk '{size+=$5}END{print size}'"<<endl;
}

2.

unsigned long get_file_length( FILE* file_ptr )
{
unsigned long PosCur = 0;
unsigned long PosBegin = 0;
unsigned long PosEnd = 0;

if ( NULL == file_ptr )
{
return 0;
}

PosCur = ftell( file_ptr ); //得到文件指针的当前位置
fseek( file_ptr, 0L, SEEK_SET ); //将文件指针移到文件开始
PosBegin = ftell( file_ptr ); //得到当前文件的位置,也就是文件头的位置
fseek( file_ptr, 0L, SEEK_END ); //将文件指针移到文件末尾
PosEnd = ftell( file_ptr ); //得到文件的末尾位置
fseek( file_ptr, PosCur, SEEK_SET ); //将指针移到文件的原来位置

return PosEnd - PosBegin; //返回文件大小
}

3.
long
get_file_size( char * filename )
{
struct stat f_stat;

if( stat( filename, &f_stat ) == -1 ){
return -1;
}

return (long)f_stat.st_size;
}
下面是一个例子:
-----------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

long
get_file_size( char * filename )
{
struct stat f_stat;

if( stat( filename, &f_stat ) == -1 ){
return -1;
}

return (long)f_stat.st_size;
}

int main(int argc, char *argv[])
{
if(argc == 1)
{
printf("%s size: %d/n", argv[0], get_file_size(argv[0]));
printf("usage: [%s] [filename]/n", argv[0]);
}

else
printf("%s size: %d", argv[1], get_file_size(argv[1]));
system("PAUSE");
return 0;
}

4.
利用函数filelength(int)很简单即可得到
#include <io.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
int nFp = open("./test.txt", O_RDONLY);
int len = filelength(nFp);

/*
//或者
FILE* fp;
fp = fopen("./test.txt", "r");
int nFp = fileno(fp);//将文件描述符转为句柄
int len = filelength(nFp);
*/

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: