linux下怎样得到文件的大小
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash

·
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);
*/
}
//得到已经使用的磁盘空间,以字节为单位
#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);
*/
}




A beautiful web dashboard for Linux
最近提交(Master分支:1 个月前 )
186a802e
added ecosystem file for PM2 5 年前
5def40a3
Add host customization support for the NodeJS version 5 年前

新一代开源开发者平台 GitCode,通过集成代码托管服务、代码仓库以及可信赖的开源组件库,让开发者可以在云端进行代码托管和开发。旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。
更多推荐
所有评论(0)