C语言文件操作

局部变量和全局变量

先来看一个例子,设计两个函数,每一个函数的功能是让a加一,最终实现a等于2

#include<stdio.h>
void funA(int a){
	a++;
}
void funB(int b){
	a++;
}
int main(){
	int a=0;
	funA(a);
	funB(a);
	printf("%d",a);
	return 0;
}//输出的结果是0;

显然这样设计函数是不行的,要实现这个a等于2,必须传指针解引用,可以这样实现:

void funA(int*a) {
	(*a)++;//注意++的运算优先级高于*,所以要加()
}
void funB(int* a) {
	(*a)++;
}
int main() {
	int a = 0;
	funA(&a);
	funB(&a);
	printf("%d", a);
	return 0;
}//a的值为2;

试着将a设置为全局变量

int a = 0;//全局变量,整个项目有效
void funA() {
	a++;
}
void funB() {
	a++;
}
int main() {

	funA();
	funB();
	printf("%d", a);
	return 0;
}//a=2

如果在两个文件,需要用其中一个文件里定义的全局变量,则需要使用关键词extern;

//test.cpp
#define _CRT_SECURE_NO_WARNINGS
 #include <stdio.h>
#include<string.h>
int a = 0;//全局变量,整个项目有效
extern void fun();
void funA() {
	a++;
}
void funB() {
	a++;
}
int main() {

	funA();
	funB();
	fun();
	printf("%d", a);
	return 0;
}//a=10

//test2.cpp
extern int a;//a在其他文件定义过,需要LINK
void fun() {
	a = 10;
}

静态局部变量:局部可见,本文件有效

文件基本概念

文件:存储外部介质上的数据的集合
磁盘:永久地数据存储
内存:断电即消失

文本文件:又称ASCII文件,数据以ASCII代码形式存储
二进制文件:数据以二进制形式进行存储 比如:多媒体文件,图片
模式(权限)

文本文件:  r只读   w只写   a追加写
           r+读写  w+读写  a+读写
二进制文件:rb只读   wb只写   ab追加写
           rb+读写  wb+读写  ab+读写

文本文件:
r只读:文件必须存在
w只写:文件可存在,可不存在,存在,覆盖;不存在新创建
a追加写:若文件存在,光标移动到文件的末尾,进行数据写入,若不存在,新创建
r+读写:文件必须存在
w+读写 a+读写

文件操作函数

fopen()  fread()  fwrite()  fclose()

练习:将test1.cpp文件的内容拷贝一份到new.cpp

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main() {
	FILE* fp1 = fopen("test1.cpp", "r");
	if (fp1 == NULL)return -1;
	FILE* fp2 = fopen("new.cpp", "w");
	if (fp2 == NULL)return -1;
	int num = 0;
	char buff[256] = { 0 };
	while (num = fread(buff, 1, 256, fp1)) {
		fwrite(buff, 1, num, fp2);
		memset(buff, 0, 256);
	}
	fclose(fp1);
	fclose(fp2);
	return 0;
}
//最后可以将其封装成为一个函数
void copyfile(const char* pathnewfile, const char* patholdfile) {
	if (pathnewfile == NULL || patholdfile == NULL)return;
	FILE* fp1 = fopen(patholdfile, "r");
	if (fp1 == NULL)return ;
	FILE* fp2 = fopen(pathnewfile, "w");
	if (fp2 == NULL)return ;
	int num = 0;
	char buff[256] = { 0 };
	while (num = fread(buff, 1, 256, fp1)) {
		fwrite(buff, 1, num, fp2);
		memset(buff, 0, 256);
	}
	fclose(fp1);
	fclose(fp2);
}
int main() {
	copyfile("E:/new.txt","E:/1.txt");
	return 0;
}

\在C语言中,\ 具有转义字符的作用所以需要用 \,也可用 / 来代替 \

给你个文件(例如:成都.mp3)如何计算文件大小?(提示,使用
fseek 和 ftell 函数)

#include <string>
int mian() {
	FILE* file = fopen("aaa.cpp","r+");
	if (file == NULL)
	{
		printf("打开文件失败");
		return -1;
	}
	fseek(file, 0, SEEK_END);//定位到文件的最后面
	long length = ftell(file);//ftell获得该文件指示符此时的偏移量,此时已经是在文件末尾,故能获得文件的大小
	printf("%ld", length);
	fclose(file);
	return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值