今天给各位分享c语言读取文件的字节大小的知识,其中也会对c语言获取文件大小进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、c代码中如何获取一个文件的字节数~~2、如何用C语言获取文件的大小3、C语言 读取文件到内存4、c语言中对文件进行读写,写入的文件字节数很多,为什么读的时候只能读到固定字节的数,而且只有1千多字节。5、用c语言求数据文件的字节大小6、C语言获取txt文件大小两种方法的差异
c代码中如何获取一个文件的字节数~~
用以下的方法可以获取一个文件的字节数:
先用fopen打开文件,然后把文件指针指向文件尾.
再用ftell获得文件指针当前位置(即文件长度).
源代码:
#include “stdafx.h”
#include stdio.h
#include iostream
using namespace std;
int main()
{
FILE* fp = NULL;
int nFileLen = 0;
fp = fopen(“c:/Test.txt”, “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
1.MFC中的方法:(C++)
CFileStatus status;
CFile::GetStatus(“D:\\test.txt”,status);
long lSizeOfFile;
lSizeOfFile = status.m_size;
lSizeOfFile的值就是D:\\test.txt文件的大小
2.标准C获得文件大小的5种方法
(注意:”__FILE__”指的是当前文件,你可以改为有效路径的目标文件,比如”D:\\test.txt”)
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 “stdafx.h”
#include “stdio.h”
#include sys/stat.h
#include io.h
#include FCNTL.H
int getfilesize()
{
int iresult;
struct _stat buf;
iresult = _stat(__FILE__,buf);
if(iresult == 0)
{
return buf.st_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;
}
如何用C语言获取文件的大小
/* 解题思路: 以只读方式打开某一文件,然后将文件指针定位在文件结尾的位置,利用ftell函数返回指针的在文件中的相对位置即可。
*/
#include “stdio.h”
main()
{ FILE *fp; /*定义文件指针*/
long cnt; /*定义变量cnt用来存储文件大小数据*/
fp=fopen(“c:\\1.txt”,”r”); /*此处请填写测试文件的地址,并以只读(“r”)方式打开文件*/
if( fp==NULL ) /*如果打开的文件不存在,则退出*/
{ exit(0);
printf(“文件打开失败!”);
}
fseek(fp,0L,SEEK_END); /*利用fseek函数将指针定位在文件结尾的位置*/
cnt=ftell(fp); /*利用ftell函数返回指针相对于文件开头的位置,以字节计算*/
printf(“文件所占的字节数为%ld个\n”,cnt); /*进行输出*/
}
C语言 读取文件到内存
1.文件的大小。
文件大小:该文件所占的存储空间的大小,基本单位为字节B,字节向上分别为KB、MB、GB、TB,每级为前一级的1024倍,比如1KB=1024B,1M=1024KB。
2.是否可以不预先分配内存。
可以不预先分配跟文件大小一致的内存,但是从文件中读出的每一行都要分配一个内存,可以为每一行设定一个固定的内存大小,比如A字节,然后用C语言的malloc函数为该行数据分配内存,读出数据后,判断分配的内存是否够用,如果不够用,可以用C语言的realloc函数对该块内存进行再分配。
malloc函数
malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。
void* 类型表示未确定类型的指针。C,C++规定,void* 类型可以通过类型转换强制转换为任何其它类型的指针。
realloc函数
realloc的全程是reset allocation,中文名叫动态内存调整,用于调整一块连续的已分配的内存块区域。
3.数组和struct结构体的建立。
double数组:double a[100];
字符数组:char a[100];
struct结构体:
struct st {
double a[100];
char b[100];
};
c语言中对文件进行读写,写入的文件字节数很多,为什么读的时候只能读到固定字节的数,而且只有1千多字节。
因为读进来的数,你要存放到某个地方,你需要先知道存放的地方有多大,读入数量不能超过这个地方的大小。
例如,存放到 buff, 存放的地方大小是 buff_size (例如 2048字节)
while (fgets(buff,buff_size,fin) !=NULL){ };
fgets 是读一行,行长度不大于 buff_size , buff 里就放 完整的一行,大于,就读入/放入 buff_size 个字节。
fread, 也要提供 大小。
buff_size 数值大小 也可以很大,只要动态分配能成功分配就行,并不限于 1k,2k.
用c语言求数据文件的字节大小
stdio.h足够.
data.txt可以换成你的数据文件名。
#include stdio.h
int main(int argc, char **argv)
{
long start, end;
FILE *fp = fopen(“data.txt”, “rb”);
if(fp){
start = ftell(fp);
fseek(fp, 0L, SEEK_END);
end = ftell(fp);
printf(“%ld\n”, end – start);
fclose(fp);
}
return 0;
}
C语言获取txt文件大小两种方法的差异
我测试了你的代码:
#includestdio.h
#includestring.h
#includestdlib.h
void main()
{
FILE *p=fopen(“d:\\jiuibf.txt”,”rt”);
int length = 0;
for(;fgetc(p)!=EOF;length++);
fclose(p);
printf(“第一种方式,文件长度=%d\n”,length);
p=fopen(“d:\\jiuibf.txt”,”rb”);
fseek(p,0,2);
length=ftell(p);
fclose(p);
printf(“第二种方式,文件长度=%d\n”,length);
}
文本文件的内容是:
FILE *p=(“jiuibf.txt”,”rt”);
int length;
for(;fgetc(p)!=EOF;length);
FILE *p=(jiuibf.txt”,”rb”);
int length;
fseek(p,0,2);
length=ftell(p);
程序的输出是:
原因分析:
在windows下,以文本方式写入文件的\n会被转换为\r\n(也就是0x0D0A),输出的时候,\r\n会被转换回\n。
fgetc在读入时会将\r\n转换成一个\n;上面的文本文件有6个回车换行。
所以第一种方式比第二种方式少6
C语言获得文件的长度方式就是第二种:
FILE*fp;
fp=fopen(“localfile”,”rb”);// localfile文件名
fseek(fp,0,SEEK_SET);
fseek(fp,0,SEEK_END);
long longBytes=ftell(fp);// longBytes就是文件的长度
关于c语言读取文件的字节大小和c语言获取文件大小的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。