获取文件大小及注意事项

来源:互联网 发布:卡洛儿秘密知乎 编辑:程序博客网 时间:2024/04/30 18:02
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>//文本文件 读取 \r\n -->\n 写入 \n -->\r\n 获取文件二进制大小,理论都是 rb//获取大小理论都用 rb int getfilesize(char *path){int sum = 0;FILE *pfr = fopen(path, "rb");//if (pfr == NULL){printf("打开文件失败!\n");return -1;}else{//这儿使用 int 代替 char 结果又正确了,可以见这儿读取时出现了溢出问题,造成了EOF的出现。<span style="white-space:pre"></span>//int ch; //代替 char ch; 就可以解决问题。//char ch;//while ((ch = fgetc(pfr)) != EOF) //这儿有ch会为 EOF 所以读不准确//{//sum++;//}//这个准确但是比较慢。char ch;sum = -1;//使用这个获取文件大小时,因为这儿要读到 文件的结束//把 EOF 也读进来,加了一次,所以这个要减去。while (!feof(pfr)){ch = fgetc(pfr);//if (ch == '\n')如果是使用 "r" 进行读写的,就需要多加一次//{//sum++;//如果是使用 "r" 进行读写的,就需要多加一次////因为 \n 写入文件时被写成 \r\n,而使用"r"读取时就读一次////所以读出的结果不准确。如果使用 "rb" 进行读取而不会出这////这样的情况。所以最好获取文件大小时使用 "rb".//}sum++;}//最方便的一种方法/*fseek(pfr, 0, SEEK_END);sum = ftell(pfr);*/}return sum; }//这儿写入了一些 \n 来做验证void tbw(char *path){FILE *pfw = fopen(path, "w");if (pfw == NULL)printf("打开失败!\n");for (int i = 0; i < 5; i++){fputc('\n',pfw);}fclose(pfw);}char *pathw = "D:\\w.txt";void main(){tbw(pathw);printf("%d\n", getfilesize(pathw));system("pause");}

0 0
原创粉丝点击