C语言实现读取文件的简单代码

一、写文件

#include 
#include 
#include 
#include 
int main()
{
	printf("File :%s\n", __FILE__);
	printf("Date :%s\n", __DATE__);
	printf("Time :%s\n", __TIME__);
	printf("Line :%d\n", __LINE__);
	//printf("ANSI :%d\n", __STDC__);
	char msg[1000];
	FILE *stream;
	int i = 0;    
	if ((stream = fopen("D:/CppWorkspace/Class_2/Class4/abc.txt", "w")) == NULL)
	{
		perror("fail to write");
		exit(1);
	}
	scanf("%s", msg);    //控制台键入内容到文件中
	while (msg[i])
	{
		fputc(msg[i], stream);
		i++;
	}
	return 0;
}

运行结果:

C语言实现读取文件的简单代码_第1张图片

二、读文件

1、打开文件 fopen("需要打开的路径")

2、然后使用 fgets 函数读取行

#include 
#include 
#include 
#include 
#define MAX_LINE 1024
int main()
{
	char buf[MAX_LINE];  /*缓冲区*/
	FILE *fp;            /*文件指针*/
	int len;             /*行字符个数*/
	if ((fp = fopen("D:/CppWorkspace/Class_2/Class4/abc.txt", "r")) == NULL)
	{
		perror("fail to read");
		exit(1);
	}
	while (fgets(buf, MAX_LINE, fp) != NULL)
	{
		len = strlen(buf);
		buf[len - 1] = '\0';  /*去掉换行符*/
		printf("%s %d \n", buf, len - 1);
	}
	return 0;
}

运行结果:

三、按‘行’读取代码:

1、 使用fgets函数,从文件中读取多行:

#include "stdlib.h"
#include "stdio.h"
 
int main(int argc, char *argv[])
{
    FILE *in= fopen("D:/in.java", "r");
    char buf[1024];
 
    while (fgets(buf, sizeof(buf), in) != NULL)
    {
        printf("%s", buf);
    }
 
    fclose(text);
 
    return 0;
}

 2、使用fputs函数,从一个文件逐行读取 ,写入到另一个文件:

#include "stdlib.h"
#include "stdio.h"
 
int main(int argc, char *argv[])
{
    FILE *in= fopen("D:/In.java", "r");
    FILE *out = fopen("D:/Out.java", "w");
 
    char buf[1024];
 
    while (fgets(buf, sizeof(buf), in) != NULL)
    {
        fputs(buf, out);
    }
 
    fclose(in);
    fclose(out);
 
    return 0;
}

四、fopen & fclose

1、文件指针名 = fopen( 文件名, 使用文件方式 );

rt 只读打开一个文本文件,只允许读数据
wt 只写打开或建立一个文本文件,只允许写数据
at 追加打开一个文本文件,并在文件末尾写数据
rb 只读打开一个二进制文件,只允许读数据
wb 只写打开或建立一个二进制文件,只允许写数据
ab 追加打开一个二进制文件,并在文件末尾写数据
rt+ 读写打开一个文本文件,允许读和写
wt+ 读写打开或建立一个文本文件,允许读写
at+ 读写打开一个文本文件,允许读,或在文件末追加数据
rb+ 读写打开一个二进制文件,允许读和写
wb+ 读写打开或建立一个二进制文件,允许读和写
ab+ 读写打开一个二进制文件,允许读,或在文件末追加数据

(1)文件使用方式由r、w、a、t、b 和 + 六个字符拼成,各字符的含义是:
 r(read):读
 w(write):写
 a(append):追加
 t(text):文本文件,可省略不写
 b(banary):二进制文件
 +:读和写

(2)凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。
(3)用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
(4) 若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错
(5)在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:

 FILE*fWrite, *fRead;
 //第一种打开文件的方法
 if (!(fWrite = fopen("test.txt", "w")))
 {
     printf("file was not opened! ");
     exit(1);
 }
 //第二种打开文件的方法
 fRead = fopen("test.txt", "r");
 if (fRead == NULL)
 {
     printf("file was not opened! ");
     exit(1);
 }

(6)把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换
(7)标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开的,可直接使用。

2、文件关闭函数(fclose函数)

文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件的数据丢失等错误。
fclose函数调用的一般形式是:
fclose(文件指针);
例如:
fclose(fp);
正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。

C语言文件指针及文件打开和关闭

五、读和写函数

1、字符读写函数 fgetc / fputc

 int fputc(
 int c,       //字符
 FILE *stream //文件指针
 );
int fgetc(
FILE *stream //文件指针
);

示例代码:

#include 

void function()
{
	//打开文件
	FILE *fWrite, *fRead;
	if (!(fWrite = fopen("./test.txt", "w")))
	{
		printf("file was not opened! ");
		exit(1);
	}
	fRead = fopen("./test.txt", "r");
	if (fRead == NULL)
	{
		printf("file was not opened! ");
		exit(1);
	}
	/*************** fputc *****************/
	//写入单个字符
	fputc('a', fWrite);	//写入字符
	//循环写入字符
	char arr[128] = "你好,世界!";
 
	char *p = arr;
	while ((*p != '\0') && fputc(*(p++), fWrite) != EOF);
	fclose(fWrite);	//一定要记得关闭文件
	/*************** fgetc *****************/
	//单个读取字符
	char ch = fgetc(fRead);
	putchar(ch);

	rewind(fRead);	//将文件内部指针移回文件开头
	 
	while (!feof(fRead))	//feof函数
	{
		printf("%c", fgetc(fRead));
	}
	fclose(fRead);
}

int main() {

	function();
	return 0;
}

运行结果:

C语言实现读取文件的简单代码_第2张图片

  • 第一步是打开文件fopen,然后判断是否打开成功
  • 读写操作要分别用两个文件指针
  • 然后进行读写操作,同时对一个文件进行读写操作会出错,当写入操作完成之后再进行读取操作
  • feof()函数是判断文件指针是否读到文件末尾,到达文件末尾返回一真值

2、字符串读写函数 fgets / fputs

int fputs(
   const char *str,	//字符数组
   FILE *stream		//文件指针
);

char *fgets(
   char *str,		//字符数组
   int numChars,	//最多读取的字符个数
   FILE *stream		//文件指针
);

示例代码:

//写入
fputs( "Hello world\n", fWrite);
//读取
char arr[128];
while (fgets(arr, 127, fRead) != NULL)	//arr至少留一个位置给'\0'
{
	puts(arr);
}

3、格式化读写文件 fprintf / fscanf

int fprintf(
   FILE *stream,		//文件指针
   const char *format [,//字符数组
   argument ]...
);

int fscanf(
   FILE *stream,		//文件指针
   const char *format [,//字符数组
   argument ]...
);

fprintf() 失败时返回‘-1’

参考资料: C语言中fscanf函数

其中fscanf函数的返回值为:参数列表中被成功赋值的参数个数;失败时,返回‘-1’

示例:

C语言实现读取文件的简单代码_第3张图片

示例代码:

有问题的代码?

#include 

void function()
{
	//打开文件
	FILE *fWrite, *fRead;
	if ((fWrite = fopen("./thisfile.txt", "w")) == NULL) {
		printf("file can not open!");
		exit(1);
	}
	//写入文件
	fprintf(fWrite, "我的学号是%d\n", 1001);
	char arr[128] = "你好,世界!";
	char arr1[128] = {0};
	fprintf(fWrite, arr);
	fclose(fWrite);
	//读取文件
	if ((fRead = fopen("./thisfile.txt", "r")) == NULL) {
		printf("file can not open!");
		exit(1);
	}
	while (!feof(fRead))
	{
		fscanf(fRead, arr1);
		puts(arr1);
	}
	fclose(fRead);
}

int main() {

	function();
	return 0;
}

4、二进制读写文件 fread / fwrite

size_t fwrite(
   const void *buffer,	//指向要写入的数据的指针
   size_t size,			//要写入项目的大小,以字节为单位
   size_t count,		//要写入的最大项目数
   FILE *stream			//指向FILE结构的指针
);

size_t fread(
   void *buffer,		//数据的存储位置
   size_t size,			//项目大小(以字节为单位)
   size_t count,		//读取的最大项目数
   FILE *stream			//指向FILE结构的指针
);

 https://zhuanlan.zhihu.com/p/98575713

C语言实现读取文件的简单代码_第4张图片

C语言实现读取文件的简单代码_第5张图片 

C语言实现读取文件的简单代码_第6张图片

C语言实现读取文件的简单代码_第7张图片

 

 

你可能感兴趣的:(C知识点)