FILEfp;
fp=fopen("localfile","rb");// localfile文件名
fseek(fp,0L,SEEK_END); / 定位到文件末尾 /
flen=ftell(fp); / 得到文件大小 /
p=(char )malloc(flen+1); / 根据文件大小动态分配内存空间 /
if(p==NULL)
{
fclose(fp);
return 0;
}
fseek(fp,0L,SEEK_SET); / 定位到文件开头 /
fread(p,flen,1,fp); / 一次性读取全部文件内容 /
p[flen]=0; / 字符串结束标志 /
all:strchangeo
gcc -o strchangeo -c strchangec
strchangeo:strchangec
gcc -o strchange strchangeo
clean:
rm -rf strchange o
用以下的方法可以获取一个文件的字节数:
先用fopen打开文件,然后把文件指针指向文件尾
再用ftell获得文件指针当前位置(即文件长度)
源代码:
#include "stdafxh"
#include <stdioh>
#include <iostream>
using namespace std;
int main()
{
FILE fp = NULL;
int nFileLen = 0;
fp = fopen("c:/Testtxt", "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
1MFC中的方法:(C++)
CFileStatus status;
CFile::GetStatus("D:\\testtxt",status);
long lSizeOfFile;
lSizeOfFile = statusm_size;
lSizeOfFile的值就是D:\\testtxt文件的大小
2标准C获得文件大小的5种方法
(注意:"__FILE__"指的是当前文件,你可以改为有效路径的目标文件,比如"D:\\testtxt")
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 "stdafxh"
#include "stdioh"
#include <sys/stath>
#include <ioh>
#include <FCNTLH>
int getfilesize()
{
int iresult;
struct _stat buf;
iresult = _stat(__FILE__,&buf);
if(iresult == 0)
{
return bufst_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函数不需要,只要文件名就行(你的文件在当前路径下,要不还需将路径名加上),int state(const char path,struct stat buf);这是函数原型。在struct state这个结构体中有个st_size这个变量,他就是文件大小的变量。具体你可以查一下man手册。与它类似的还有一个fstat,他需要open文件得到文件描述符。
1。GetLength()
不行,貌似它获取的是缓冲区内的数据大小,最大8192字节。
2。Seek()
不行,经他人验证不行,我也就懒得试了。
3。QueryOption()
获取的居然是乱码。
ULONG file_total_size=0;
TCHAR szContentLength[64]={0};
ULONG dwInfoSize = 64;
file->QueryOption(>
改用支持 64位整形的
_finddata64_t
_filelengthi64
_findfirsti64
_findnexti64
_telli64
以上几个方法执行的效果都如下:
读取的text文件如下:
空洞文件即是里面内容都是空字符的文件,主要用来占位置,实现如下:
生成的文件如下:
用vim打开是这样的
头文件:windowsh
long long fileSize;
WIN32_FILE_ATTRIBUTE_DATA fi;
GetFileAttributesEx(TEXT("C:\\1dat"), GetFileExInfoStandard, &fi);
fileSize = finFileSizeHigh;
fileSize = (fileSize << 32) | finFileSizeLow;
然后fileSize就是你要的文件大小了
以上就是关于c语言求文件长度,ftell得到文件长度为-1全部的内容,包括:c语言求文件长度,ftell得到文件长度为-1、c代码中如何获取一个文件的字节数~~、C语言 stat()函数获得文件大小需不需要打开文件就是stat()函数是怎么获得文件的大小的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)