获取文件大小及注意事项

#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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值