
#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语言怎样测试一个文本文件的大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)