C语言基础部分-文件操作

举报
孙中明 发表于 2022/01/23 00:54:55 2022/01/23
【摘要】 文件操作 基本说明 文件: 文件指存储在外部介质(如磁盘磁带)上数据的集合。 操作系统是以文件为单位对数据进行管理的。 #include<stdio.h> #i...

文件操作

基本说明

文件:

文件指存储在外部介质(如磁盘磁带)上数据的集合。 操作系统是以文件为单位对数据进行管理的。

#include<stdio.h>
#include<stdlib.h>

int main(){
	FILE *fp;
	fp=fopen("./file.txt","r+");
	if(NULL==fp){
		perror("this is open problem");
		goto end;
	}
end:
	system("pause");

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

1580041620616

#include<stdio.h>
#include<stdlib.h>

int main(){
	FILE *fp;
	fp=fopen("./file","r+");
	if(NULL==fp){
		perror("this is open problem");
		goto end;
	}
end:
	system("pause");

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

1580041668929

perror

语法:   
#include <stdio.h>
void perror( const char *str );

  
 
  • 1
  • 2
  • 3

perror()函数打印str(字符串)和一个相应的执行定义的错误消息到全局变量errno中.

#ifndef _FILE_DEFINED
struct _iobuf {
        char *_ptr;//下一个要读取的字符的地址
        int   _cnt;//剩余字符
        char *_base;//缓冲区基地址
        int   _flag;//文件标识位
        int   _file;//文件描述符
        int   _charbuf;//
        int   _bufsiz;//缓冲区大小
        char *_tmpfname;
        };
typedef struct _iobuf FILE;
#define _FILE_DEFINED
#endif

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

“r” (只读)为输入打开一个文本文件“w” (只写)为输出打开一个文本文件“a” (追加)向文本文件尾增加数据“rb” (只读)为输入打开一个二进制文件“wb” (只写)为输出打开一个二进制文件"ab“ (追加)向二进制文件尾增加数据"r+“ (读写)为读/写打开一个文本文件"w+” (读写)为读/写建立一个新的文本文件"a+” (读写)为读/写打开一个文本文件"rb+“ (读写)为读/写打开一个二进制文件“wb+“ (读写)为读/写建立一个新的二进制文件“ab+” (读写)为读/写打开一个二进制文件

文件函数:

分类             函数名           功能                              	
打开文件         fopen()          打开文件          
关闭文件         fclose()         关闭文件
文件定位         fseek()          改变文件位置指针的位置
                Rewind()    	 使文件位置指针重新至于文件开头
                Ftell()          返回文件位置指针的当前值
文件状态         feof()           若到文件末尾,函数值为真
                Ferror()     	 若对文件操作出错,函数值为真
                Clearerr()   	 使ferror和feof()函数值置零
文件读写         fgetc(),getc()	  从指定文件取得一个字符          
                fputc(),putc()	 把字符输出到指定文件
                fgets()			从指定文件读取字符串
                fputs()			把字符串输出到指定文件
                fread()			从指定文件中读取数据项
                fwrite()		把数据项写到指定文件中
                fscanf()		从指定文件按格式输入数据
                fprintf()		按指定格式将数据写到指定文件中

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

fclose(文件指针);

函数功能: 使文件指针变量不指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作。

返回值:关闭成功返回值为0;否则返回EOF(-1) 。

fputc函数

函数调用:fputc ( ch,fp ) ;

函数功能: 将字符(ch的值)输出到fp所指向的文件中去。

返回值:如果输出成功,则返回值就是输出的字符;如果输出失败,则返回一个EOF。

fgetc函数

函数调用:ch=fgetc(fp);

函数功能: 从指定的文件读入一个字符,该文件必须是以读或读写方式打开的。

返回值:读取成功一个字符,赋给ch。如果遇到文件结束符,返回一个文件结束标志EOF 。

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[]){



	FILE *fp;

	int i;
	for(i=0;i<argc;i++){
		puts(argv[i]);
	}

	fp=fopen("./file","r+");
	if(NULL==fp){
		perror("this is open problem");
		goto end;
	}
end:
	system("pause");

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[]){



	FILE *fp;

	int i;
	for(i=0;i<argc;i++){
		printf("i=%d\n",i);

		puts(argv[i]);
	}

	fp=fopen("argv[]","r+");
	if(NULL==fp){
		perror("this is open problem");
		goto end;
	}
end:
	system("pause");

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

1580089432633

1580089622506

1580089700677

1580089716883

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[]){



	FILE *fp;

	//int i;
	//for(i=0;i<argc;i++){
	//	printf("i=%d\n",i);
	//	puts(argv[i]);
	//}

	fp=fopen(argv[1],"r+");
	if(NULL==fp){
		perror("this is open problem");
		goto end;
	}
end:
	system("pause");

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[]){



	FILE *fp;

	//int i;
	//for(i=0;i<argc;i++){
	//	printf("i=%d\n",i);
	//	puts(argv[i]);
	//}
	int ret;
	
	fp=fopen(argv[1],"r+");
	if(NULL==fp){
		perror("this is open problem");
		goto end;
	}

	ret=fputc('A',fp);
	if(-1==ret){
		perror("fputc problem is");
	}
	fclose(fp);//关闭文件
end:
	system("pause");

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

1580090721117

注意

  • 关闭文件
  • 主动刷新
  • 缓冲区写满

1580090927927

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[]){



	FILE *fp;

	//int i;
	//for(i=0;i<argc;i++){
	//	printf("i=%d\n",i);
	//	puts(argv[i]);
	//}
	int ret;
	char c;
	
	fp=fopen(argv[1],"r+");
	if(NULL==fp){
		perror("this is open problem");
		goto end;
	}

	ret=fputc('A',fp);
	if(-1==ret){
		perror("fputc problem is");
	}
	ret=fputc('B',fp);
	fclose(fp);//关闭文件

	fp=fopen(argv[1],"r+");

	while((c=fgetc(fp))!=EOF){
		putchar(c);
	}

end:
	system("pause");

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

1580091210135

fwrite和fread

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char *argv[]){
	FILE *fp;
	char buf[128];
	int ret;
	fp=fopen(argv[1],"r+");
	if(NULL==fp){
		perror("this is open problem");
		goto end;
	}
	strcpy(buf,"helloworld");
	ret=fwrite(buf,sizeof(char),strlen(buf),fp);
	fclose(fp);

end:
	system("pause");

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

1580105429834

##文件使用方式

文件使用方式     含   义        	
“r”          (只读)为输入打开一个文本文件
“w”          (只写)为输出打开一个文本文件
“a”          (追加)向文本文件尾增加数据
“rb”         (只读)为输入打开一个二进制文件
“wb”         (只写)为输出打开一个二进制文件
"ab“         (追加)向二进制文件尾增加数据
"r+“         (读写)为读/写打开一个文本文件
"w+”         (读写)为读/写建立一个新的文本文件
"a+”         (读写)为读/写打开一个文本文件
"rb+“        (读写)为读/写打开一个二进制文件
“wb+“        (读写)为读/写建立一个新的二进制文件
“ab+”        (读写)为读/写打开一个二进制文件


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

区别

r+

写入\n .实际存储的是\r\n

读取时,\r\n会变成\n

rb+

写入\n.实际存储的是\n

读取时,\n读取出来的是\n

fseek函数(一般用于二进制文件)

函数功能:改变文件的位置指针。

函数调用形式:fseek(文件类型指针,位移量,起始点)起始点:

文件开头 SEEK_SET 0

文件当前位置 SEEK_CUR 1

文件末尾 SEEK_END 2

位移量:以起始点为基点,向前移动的字节数。一般要求为long型。

fseek函数应用举例

fseek(fp,100L,0);
将位置指针移到离文件头100个字节处。
fseek(fp,50L, 1);
将位置指针移到离当前位置50个字节处。
fseek(fp,50L, 2);
将位置指针从文件末尾处向后退10个字节。 
 


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

文章来源: hiszm.blog.csdn.net,作者:孙中明,版权归原作者所有,如需转载,请联系作者。

原文链接:hiszm.blog.csdn.net/article/details/105441137

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。