#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");
}
获取文件大小及注意事项
最新推荐文章于 2024-01-09 16:27:00 发布