C 언어에서 파일 읽기 및 쓰기 작업은 무엇입니까?

coldplay.xixi
풀어 주다: 2020-07-27 13:44:17
원래의
4054명이 탐색했습니다.

C 언어 파일 읽기 및 쓰기 작업에는 다음이 포함됩니다. 1. 파일에서 문자를 읽고 쓰는 함수, 코드는 [int fgetc(FILE *stream)] 2. 파일에서 문자열을 읽고 쓰는 함수, 코드는 [int fputs(char *string,FILE *stream)]입니다.

C 언어에서 파일 읽기 및 쓰기 작업은 무엇입니까?

C 언어 파일 읽기 및 쓰기 작업에는 다음이 포함됩니다.

1 파일 열기 함수 fopen()

파일 열기 작업은 FILE 구조 영역이 파일에 할당된다는 의미입니다. 사용자가 지정한 구조체의 포인터는 나중에 사용자 프로그램에 반환됩니다. 이 FILE 포인터를 사용하여 지정된 파일에 액세스할 수 있습니다. 열기 기능 사용 시 파일명과 파일 동작 모드(읽기, 쓰기, 읽기-쓰기)를 반드시 주셔야 합니다.

파일 이름이 없으면 생성을 뜻합니다. (파일 쓰기만 하면 읽기 시 오류가 발생합니다.) files) ) 파일 포인터가 파일의 시작 부분을 가리킵니다. 동일한 이름의 파일이 이미 존재하는 경우 해당 파일을 삭제합니다. 동일한 이름의 파일이 없으면 파일을 생성하고 파일 포인터를 파일의 시작 부분을 가리킵니다.

fopen(char *filename,char *type);
로그인 후 복사

여기서*filename은 열려는 파일의 파일 이름 포인터이며, 일반적으로 큰따옴표로 묶인 파일 이름 또는 이중 백슬래시로 구분된 경로 이름으로 표시됩니다.*type매개변수는 파일을 여는 작업 방법을 나타냅니다. 사용 가능한 작업 방법은 다음과 같습니다:*filename是要打开文件的文件名指针,一般用双引号括起来的文件名表示,也可使用双反斜杠隔开的路径名。而*type参数表示了对打开文件的操作方式。其可采用的操作方式如下:

  • 含义 "r" 打开,只读;

  • "w" 打开,文件指针指到头,只写;

  • "a" 打开,指向文件尾,在已存在文件中追加;

  • "rb" 打开一个二进制文件,只读;

  • "wb" 打开一个二进制文件,只写;

  • "ab" 打开一个二进制文件,进行追加 ;

  • "r+" 以读/写方式打开一个已存在的文件;

  • "w+" 以读/写方式建立一个新的文本文件 ;

  • "a+" 以读/写方式打开一个文件文件进行追加 ;

  • "rb+" 以读/写方式打开一个二进制文件;

  • "wb+" 以读/写方式建立一个新的二进制文件 ;

  • "ab+" 以读/写方式打开一个二进制文件进行追加 ;

当用fopen()成功的打开一个文件时,该函数将返回一个FILE指针,如果文件打开失败,将返回一个NULL指针。

2.关闭文件函数fclose()

文件操作完成后,必须要用fclose()函数进行关闭,这是因为对打开的文件进行写入时,若文件缓冲区的空间未被写入的内容填满,这些内容不会写到打开的文件中去而丢失。只有对打开的文件进行关闭操作时,停留在文件缓冲区的内容才能写到该文件中去,从而使文件完整。

再者一旦关闭了文件,该文件对应的FILE结构将被释放,从而使关闭的文件得到保护,因为这时对该文件的存取操作将不会进行。文件的关闭也意味着释放了该文件的缓冲区。

int fclose(FILE *stream);
로그인 후 복사

它表示该函数将关闭FILE指针对应的文件,并返回一个整数值。若成功地关闭了文件,则返回一个0值,否则返回一个非0值。

#include  #include  #include  using namespace std; int main() { FILE *fp; // 头文件#include  if((fp=fopen("123.txt","w"))==NULL) { printf("file cannot open \n"); //exit(0); 头文件#include  //exit结束程序,一般0为正常推出,其它数字为异常,其对应的错误可以自己指定。 } else printf("file opened for writing \n"); if(fclose(fp)!=0) printf("file cannot be closed \n"); else printf("file is now closed \n"); return 0; }
로그인 후 복사

3.文件的读写

(1).读写文件中字符的函数(一次只读写文件中的一个字符):

int fgetc(FILE *stream); int getchar(void); int fputc(int ch,FILE *stream); int putchar(int ch); int getc(FILE *stream); int putc(int ch,FILE *stream);
로그인 후 복사

fgetc()函数将把由流指针指向的文件中的一个字符读出,例如: ch=fgetc(fp); 将把流指针fp指向的文件中的一个字符读出,并赋给ch,当执行fgetc()函数时,若当时文件指针指到文件尾,即遇到文件结束标志EOF(其对应值为-1),该函数返回一个-1给ch,在程序中常用检查该函数返回值是否为-1来判断是否已读到文件尾,从而决定是否继续。

#include  #include  #include  using namespace std; int main() { FILE *fp; char ch; if((fp=fopen("123.txt","r"))==NULL) printf("file cannot open \n"); else printf("file opened for writing \n"); while((ch=fgetc(fp))!=EOF) fputc(ch,stdout); //这里是输出到屏幕 if(fclose(fp)!=0) printf("file cannot be closed \n"); else printf("file is now closed \n"); return 0; }
로그인 후 복사

该程序以只读方式打开123.txt文件,在执行while循环时,文件指针每循环一次后移一个字符位置。用fgetc()函数将文件指针指定的字符读到ch变量中,然后用fputc()函数在屏幕上显示,当读到文件结束标志EOF时,关闭该文件。 上面的程序用到了fputc()函数,该函数将字符变量ch的值写到流指针指定的文件中去,由于流指针用的是标准输出(显示器)的FILE指针stdout,故读出的字符将在显示器上显示。又比如: fputc(ch,fp); 该函数执行结构,将把ch表示的字符送到流指针fp指向的文件中去。

在TC中,putc()等价于fputc(),getc()等价于fgetc()。 putchar(c)相当于fputc(c,stdout);getchar()相当于fgetc(stdin)。 注意,这里使用char ch,其实是不科学的,因为最后判断结束标志时,是看ch!=EOF,而EOF的值为-1,这显然和char是不能比较的。所以,某些使用,我们都定义成int ch

  • 의미 "r"은 읽기 전용입니다.

  • "w" opens , 파일 포인터는 시작 부분을 가리키고 쓰기만 합니다.
  • "a"는 파일의 끝을 가리키고 기존 파일에 추가됩니다. "rb"는 바이너리 파일을 읽기 전용으로 엽니다.
  • "wb"는 쓰기 전용으로 바이너리 파일을 엽니다.
  • "ab"는 추가용으로 바이너리 파일을 엽니다. ;
  • < li>"r+" 읽기/쓰기 모드로 기존 파일 열기
  • "w+" 읽기/쓰기 모드로 새 텍스트 파일 만들기; >
  • "a+" 추가를 위해 읽기/쓰기 모드로 파일 열기
  • "rb+" 읽기/쓰기 모드로 바이너리 파일 열기
  • "wb+" 읽기/쓰기 모드에서 새 바이너리 파일을 생성합니다.
  • "ab+" 추가를 위해 읽기/쓰기 모드에서 바이너리 파일을 엽니다.
fopen( ) 파일이 성공적으로 열렸을 때 이 함수는 FILE 포인터를 반환합니다. 파일을 열지 못하면 NULL 포인터가 반환됩니다. 2. 파일 닫기 함수 fclose() 파일 작업이 완료된 후 fclose() 함수를 사용하여 파일을 닫아야 합니다. 버퍼가 기록되지 않았습니다. 입력 내용이 채워지고 해당 내용이 열린 파일에 기록되지 않고 손실됩니다. 열린 파일을 닫아야 파일 버퍼에 남아 있는 내용을 파일에 쓸 수 있어 파일이 완성된다. 또한, 파일이 닫히면 해당 파일에 해당하는 FILE 구조가 해제되어 닫힌 파일을 보호합니다. 이때 파일에 대한 접근 작업이 수행되지 않기 때문입니다. 파일을 닫는다는 것은 파일의 버퍼를 해제하는 것을 의미하기도 합니다.
#include  #include  #include  using namespace std; int main() { FILE *fp; if((fp=fopen("123.txt","a"))==NULL) printf("file cannot open \n"); else printf("file opened for writing \n"); char ch='e'; fputc(ch,fp); //输入到文件中 if(fclose(fp)!=0) printf("file cannot be closed \n"); else printf("file is now closed \n"); return 0; }
로그인 후 복사
이 함수는 FILE 포인터에 해당하는 파일을 닫고 정수 값을 반환한다는 의미입니다. 파일이 성공적으로 닫혔으면 0 값이 반환되고, 그렇지 않으면 0이 아닌 값이 반환됩니다.
char *fgets(char *string,int n,FILE *stream); char *gets(char *s); int fprintf(FILE *stream,char *format,variable-list); int fputs(char *string,FILE *stream); char *puts(char *s); int fscanf(FILE *stream,char *format,variable-list);
로그인 후 복사
로그인 후 복사
3. 파일 읽기 및 쓰기(1). 파일에서 문자를 읽고 쓰는 기능(한 번에 파일에서 한 문자만 읽고 쓰기):
#include "stdio.h" int main() { FILE *fp; char str[128]; if((fp=fopen("123.txt","r"))==NULL) { printf("cannot open file/n"); exit(1); } while(!feof(fp)) { if(fgets(str,128,fp)!=NULL) printf("%s",str); } fclose(fp); }
로그인 후 복사
로그인 후 복사
fgetc()함수 스트림 포인터가 가리키는 파일의 문자를 읽어냅니다. 예: ch=fgetc(fp); 스트림 포인터 fp가 가리키는 파일의 문자를 읽어서 ch에 할당합니다. fgetc() 함수가 실행될 때 파일 포인터가 파일의 끝을 가리키는 경우, 즉 파일 끝 플래그 EOF(해당 값은 -1)를 만나면 함수는 -1을 반환합니다. to ch. 이 함수의 반환 값이 -1인지 확인하기 위해 프로그램에서 자주 사용됩니다. 파일의 끝에 도달했는지 확인하고 계속할지 여부를 결정합니다. rrreee이 프로그램은 123.txt 파일을 읽기 전용 모드로 엽니다. while 루프를 실행할 때 파일 포인터는 루프할 때마다 한 문자 위치 뒤로 이동합니다. fgetc() 함수를 사용하여 파일 포인터에 지정된 문자를 ch 변수로 읽어온 다음 fputc() 함수를 사용하여 파일 끝 표시 EOF를 읽으면 파일이 표시됩니다. 닫은. 위 프로그램은 스트림 포인터가 지정한 파일에 문자 변수 ch의 값을 쓰는 fputc() 함수를 사용합니다. 스트림 포인터는 표준 출력(디스플레이)의 FILE 포인터 stdout을 사용하므로 읽은 문자가 표시됩니다. 모니터에. 또 다른 예: fputc(ch,fp); 이 함수는 구조를 실행하고 ch가 나타내는 문자를 스트림 포인터 fp가 가리키는 파일로 보냅니다. TC에서 putc()는 fputc()와 동일하고, getc()는 fgetc()와 동일합니다. putchar(c)는 fputc(c,stdout)와 동일하며, getchar()는 fgetc(stdin)과 동일합니다. 여기에서 char ch를 사용하는 것은 실제로 비과학적입니다. 왜냐하면 끝 표시가 최종적으로 판단될 때 ch!=EOF가 확인되고 EOF의 값이 -1이므로 char와 분명히 비교할 수 없기 때문입니다. 따라서 일부 용도에서는 int ch로 정의합니다. rrreee(2). 파일에서 문자열을 읽고 쓰는 기능
char *fgets(char *string,int n,FILE *stream); char *gets(char *s); int fprintf(FILE *stream,char *format,variable-list); int fputs(char *string,FILE *stream); char *puts(char *s); int fscanf(FILE *stream,char *format,variable-list);
로그인 후 복사
로그인 후 복사

其中fgets()函数将把由流指针指定的文件中n-1个字符,读到由指针string指向的字符数组中去,例如: fgets(buffer,9,fp); 将把fp指向的文件中的8个字符读到buffer内存区,buffer可以是定义的字符数组,也可以是动态分配的内存区。

注意,fgets()函数读到'/n'就停止,而不管是否达到数目要求。同时在读取字符串的最后加上'/0'。 fgets()函数执行完以后,返回一个指向该串的指针。如果读到文件尾或出错,则均返回一个空指针NULL,所以长用feof()函数来测定是否到了文件尾或者是ferror()函数来测试是否出错,

检测是否已到文件尾,是返回真,否则返回0,其原型是int feof(FILE *stream);

例:if(feof(fp))printf("已到文件尾");

原型是int ferror(FILE *stream);返回流最近的错误代码,可用clearerr()来清除它,clearerr()的原型是void clearerr(FILE *stream);

例:printf("%d",ferror(fp));

例如下面的程序用fgets()函数读test.txt文件中的第一行并显示出来:

#include "stdio.h" int main() { FILE *fp; char str[128]; if((fp=fopen("123.txt","r"))==NULL) { printf("cannot open file/n"); exit(1); } while(!feof(fp)) { if(fgets(str,128,fp)!=NULL) printf("%s",str); } fclose(fp); }
로그인 후 복사
로그인 후 복사

相关学习推荐:C视频教程

위 내용은 C 언어에서 파일 읽기 및 쓰기 작업은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!