c语言如何计算文件大小

c语言如何计算文件大小,第1张

#include<stdioh>

#include<stdlibh>

void main()

{

FILEfp;

int a;

if((fp=fopen("1txt","rb"))==NULL)

{

printf("此文件无法打开");

exit(0);

}

fseek(fp,0,2);

a=ftell(fp);

printf("%d\n",a);

fclose(fp);

}

望采纳!

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];

};

#include <ioh>

#include <stdioh>

int main(void)

{

FILE f = 0; int fn = 0, sz = 0;

f = fopen("c:\\abctxt", "rb");

if(!f) {

fprintf(stderr, "File Not Found\n");

return 0;

}/end if/

fn = _fileno(f); /取得文件指针的底层流式文件号/

sz = _filelength(fn);/根据文件号取得文件大小/

printf("文件abctxt大小为:%d字节\n", sz);

fclose(f);

return 0;

}/end main/

备注:上述程序适用于任何一种文件,都可以直接求出大小。

以上几个方法执行的效果都如下:

读取的text文件如下:

空洞文件即是里面内容都是空字符的文件,主要用来占位置,实现如下:

生成的文件如下:

用vim打开是这样的

stat函数不需要,只要文件名就行(你的文件在当前路径下,要不还需将路径名加上),int state(const char path,struct stat buf);这是函数原型。在struct state这个结构体中有个st_size这个变量,他就是文件大小的变量。具体你可以查一下man手册。与它类似的还有一个fstat,他需要open文件得到文件描述符。

如果文件大小指的是你从C

程序中可以读进的字符数量,

要得到这个精确的数字可能困难或不可能。

Unix

系统函数stat()

会给出准确的答案。有些系统提供了类似Unix

的stat()函数,

但只返回一个近似值。你可以调用fseek()

搜索到文件尾,

再调用ftell(),

或者调用fstat(),

然而这些方法都有同样的问题:

fstat()

不可移植,

通常返回和stat()一样的值;

ftell()

并不保证可以返回字符计数,

除非是用于二进制文件,

但是,

严格来讲,

二进制文件并不一定支持fseek

搜索到SEEK

END。某些系统提供filesize()

或filelength()

的函数,

但是它们明显的不可移植。你是否确定你必须预先知道文件大小?作为一个C

程序最准确的方法就是打开文件并读入,

也许可以重新整理代码,

使其边读入边计算文件大小。

以上就是关于c语言如何计算文件大小全部的内容,包括:c语言如何计算文件大小、C语言 读取文件到内存、用C语言怎样测试一个文本文件的大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9311313.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存