关于C语言文件操作

文件: 数据文件 和程序文件

文件指针,当用fopen函数打开一个函数的时候会返回一个指针 指向一个结构体用指针来维护这个结构体;

打开文件: 绝对路径(非常的详细),相对路径(在所创建的代码的文件夹中创建一个文件)

fopen("../../test.txt","r");以只读的方式打开当前文件夹的上一个文件夹 名字叫做 test.txxt

fopen("./"test.txt,"r");以只读的方式打开当前文件夹

../ 上一个文件夹

./ 当前的文件夹

用一个FILE* 类型的变量接收 fopen()函数返回的指针,

如果没有打开那么会返回一个空指针 这里可以用if函数和 strerror(erron)判断是否打开成功

fopen()函数以“”w”写的方式打开后 便要写入到文件用的函数可以是 fputc(char pf)这个函数是将一个字符写入到pf流中去,即前面创建的文件夹(这个函数一次只能写入一个字符)

写完后调用fclose(pf)释放pf所占得内存,然后把pf变成空指针

键盘输入和屏幕输出也是两个流 标准流 stdin和stdout

文本输入流 fgets函数一样的道理,只是要传入3个参数,从哪里获得 大小 和 放到哪里去

puts输出流

格式化输入(fprint)f和输出(fscanf)一样只是要调用流输入到哪里去和从哪里输出

而标准化输入(scanf)和标准化输出(printf)是从键盘中输入,从屏幕中输出;

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

int main() {

 /*文件 程序文件,数据文件
   文件指针: 打开文件会返回一个文件指针 FILE* 那么需要一个指针pf接收它
	char arr[1024] = {};
 写法: 绝对路径(详细地址) 相对路径:当前代码保留的文件夹的路径
  .. 表示上一个路径
 .   表示当前路径
 fopen("../../test.text","r")以只读的方式打开当前代码所处的路径的上一个路径
 fopen("./test/text","r")以只读的方式打开当前代码存储的路径的文件*/
	/*fopen("test.text", "w");*/
	FILE* pf = fopen("test1.txt", "w"); // 以只读的方式打开一个叫做“test.text”的文件,它会返回一个指针,那么便用FILE*定义一个变量去接受它
	// 文件以写得方式 如果已存在一个这样文件,就会重新创建一个新的文件将原来的文件覆盖掉
	if (pf == NULL) { //当打开失败会返回一个空指针,调用errno去看错误的原因
		printf("%s\n", strerror(errno)); //调用函数strerror(errno)查看错误的原因
		return 0;
	}
	fclose(pf); // 将pf指向的结构体内存释放掉
	pf = NULL;  // 释放掉指针

	return 0;

}



int main() {
 //写文件
	FILE* pywrite=fopen("test.txt", "w");
	if (pywrite == NULL) {
	
		printf("%s", strerror(errno));
		return 0;	
	}
	
	// 写文件(字符输入输出)
	fputc('b', pywrite); //将字符b写到pywrite这个流里面去
	fputc('i', pywrite);
	//关闭文件
	fclose(pywrite);//释放这个指针所指向的结构体的内存
	pywrite = NULL; // 将指针赋为空指针
	return 0;
}


// 读文件中的内容 文件流
int main() {

	FILE* py = fopen("test.txt", "r");// 以只读的方式打开文件
	if (py == NULL) {
//	    检验是否找到文件的地址
		printf("%s", strerror(errno));
	
	
	}
//	 找到地址
	int a=fgetc(py); //得到py指针指向的流,返回的是一个整型,创建一个变量去接受只返回一个数字(字符)
	printf("%c", a);
	fclose(py);
	py = NULL;


}



/*
 键盘是标准输入流,屏幕是标准是标准输出流,这两个是一个程序默认流
stdin 从键盘获取数据的流
stdout 从屏幕输出数据的流  都是 FILE* 的类型
sterr
*/

int main() {

	int ch = fgetc(stdin); // fgetc能用于所有的字符输入流 
	fputc(ch, stdout);	  //  将ch中的内容用屏幕流输出
	return 0;
}

int main() {

	char buff[1024] = { 0 };
	FILE* py = fopen("test.txt", "r");
	if (py == NULL) {
	
		printf("%c", strerror(errno));
		return 0;
	}
	//文本行输入输出
	fgets(buff, 4, py); // fgets的用法从py中读取4个字节到buff中去
	puts(buff);			//  输出
	fclose(py);
	py = NULL;
	return 0;

}

printf 标准的输入输出流模式,对屏幕进行输入输出
// fprintf 是所有流的模式 只是要传入一个指针流 可以对文件进行操作
//利用fprintf将数据写入到文件中去
struct s
	{
		int age;
		char arr[5];
		float score;
	};
int main() {
	
	s S = {0,'a',3.14};

	FILE* py = fopen("test2.txt", "w");//以写的方式创建一个文本文件,然后将数据写入到文件中去
	if (py == NULL) {
	
		printf("%s", strerror(errno));
	}
	// 格式化的形式写文件,需要传入流指针
	fprintf(py, "%d,%c,%f",S.age,S.arr,S.score); 
	fclose(py);
	
	// 格式化读 可以从文件中读取数据
	fscanf(py, "%d,%c,%f", &(S.age), &(S.arr), &(S.score));
	py = NULL;
	return 0;
	// 这里的流可以对应的是标准输入输出流 stdin 和 stdout


}

define  定义别名常量

tydefine  定义别名变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值