C 파일 I/O: 파일 생성, 열기, 읽기, 쓰기 및 닫기
C 파일 관리
파일은 대량의 영구 데이터를 저장하는 데 사용할 수 있습니다. 다른 많은 언어와 마찬가지로 'C'는 다음과 같은 파일 관리 기능을 제공합니다.
- 파일 생성
- 파일 열기
- 파일 읽기
- 파일에 쓰기
- 파일 닫기
다음은 'C'에서 사용할 수 있는 가장 중요한 파일 관리 함수입니다.
기능 | 목적 | |
---|---|---|
열다 () | 파일 생성 또는 기존 파일 열기 | |
fclose () | 파일 닫기 | |
fprintf() | 파일에 데이터 블록 쓰기 | |
fscanf() | 파일에서 블록 데이터 읽기 | |
getc() | 파일에서 단일 문자를 읽습니다. | |
푸치() | 파일에 단일 문자를 씁니다. | |
getw () | 파일에서 정수를 읽습니다. | |
푸우 () | 파일에 정수 쓰기 | |
fseek () | 파일 포인터의 위치를 지정된 위치로 설정합니다. | |
프텔() | 파일 포인터의 현재 위치를 반환합니다. | |
되감기 () | 파일 시작 부분에 파일 포인터를 설정합니다. |
파일을 만드는 방법
파일 작업을 원할 때마다 첫 번째 단계는 파일을 만드는 것입니다. 파일은 데이터가 저장되는 메모리 공간일 뿐입니다.
'C' 프로그램에서 파일을 생성하려면 다음 구문을 사용합니다.
FILE *fp; fp = fopen ("file_name", "mode");
위 구문에서 파일은 표준 라이브러리에 정의된 데이터 구조입니다.
fopen은 파일을 여는 데 사용되는 표준 함수입니다.
- 파일이 시스템에 없으면 파일이 생성된 다음 열립니다.
- 파일이 이미 시스템에 존재하는 경우 다음을 사용하여 직접 엽니다. 기능.
fp는 유형 파일을 가리키는 파일 포인터입니다.
파일을 열거나 생성할 때마다 해당 파일로 무엇을 할 것인지 지정해야 합니다. 'C' 프로그래밍의 파일은 읽기/쓰기 목적으로 생성하거나 열 수 있습니다. 모드는 아래에 주어진 목적 중 하나를 위해 파일을 열 것인지 지정하는 데 사용됩니다. 다음은 파일 작업 중에 사용할 수 있는 'C' 프로그래밍의 다양한 유형의 모드입니다.
파일 모드 | 상품 설명 |
---|---|
r | 읽을 파일을 엽니다. 파일이 읽기 모드인 경우 파일이 이미 시스템에 있으면 데이터가 삭제되지 않습니다. |
w | 쓰기 위해 파일을 엽니다. 파일이 쓰기 모드인 경우 파일이 전혀 존재하지 않으면 새 파일이 생성됩니다. 파일이 시스템에 이미 존재하는 경우 파일 내부의 모든 데이터가 잘리고 쓰기 목적으로 열립니다. |
a | 다음 위치에서 파일 열기 추가 모드. 파일이 추가 모드에 있으면 파일이 열립니다. 파일 내의 내용은 변경되지 않습니다. |
r+ | 처음부터 읽고 쓸 수 있도록 열려 있음 |
w+ | 읽기 및 쓰기용으로 열림, 파일 덮어쓰기 |
a+ | 읽기 및 쓰기용으로 열림, 파일에 추가 |
제시된 구문에서 파일 이름과 모드는 문자열로 지정되므로 항상 큰따옴표로 묶어야 합니다.
예:
#include <stdio.h> int main() { FILE *fp; fp = fopen ("data.txt", "w"); }
출력:
파일은 코드를 저장한 폴더에 생성됩니다.
파일을 생성하려는 경로를 지정할 수 있습니다
#include <stdio.h> int main() { FILE *fp; fp = fopen ("D://data.txt", "w"); }
파일을 닫는 방법
파일에 대한 작업이 끝나면 항상 파일을 닫아야 합니다. 즉, 파일의 내용과 링크가 종료됩니다. 이렇게 하면 파일이 실수로 손상되는 것을 방지할 수 있습니다.
'C'는 파일 닫기 작업을 수행하기 위한 fclose 함수를 제공합니다. fclose의 구문은 다음과 같습니다.
fclose (file_pointer);
예:
FILE *fp; fp = fopen ("data.txt", "r"); fclose (fp);
fclose 함수는 파일 포인터를 인수로 사용합니다. 파일 포인터와 연관된 파일은 fclose 함수의 도움으로 닫힙니다. 닫기에 성공하면 0을 반환하고, 파일을 닫는 동안 오류가 발생하면 EOF(파일 끝)를 반환합니다.
파일을 닫은 후 동일한 파일 포인터를 다른 파일에도 사용할 수 있습니다.
'C' 프로그래밍에서는 프로그램이 종료되면 파일이 자동으로 닫힙니다. fclose 함수를 작성하여 수동으로 파일을 닫는 것은 좋은 프로그래밍 습관입니다.
파일에 쓰기
C에서는 파일에 쓸 때 개행 문자 '\n'을 명시적으로 추가해야 합니다.
stdio 라이브러리는 파일에 쓰는 데 필요한 기능을 제공합니다.
- fputc(문자, 파일_포인터): file_pointer가 가리키는 파일에 문자를 씁니다.
- fputs(str, file_pointer): file_pointer가 가리키는 파일에 문자열을 씁니다.
- fprintf(파일 포인터, 문자열, 변수 목록): file_pointer가 가리키는 파일에 문자열을 인쇄합니다. 문자열에는 선택적으로 형식 지정자와 변수 목록(variable_lists)이 포함될 수 있습니다.
아래 프로그램은 파일 쓰기를 수행하는 방법을 보여줍니다.
fputc() 함수:
#include <stdio.h> int main() { int i; FILE * fptr; char fn[50]; char str[] = "Guru99 Rocks\n"; fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode" for (i = 0; str[i] != '\n'; i++) { /* write to file using fputc() function */ fputc(str[i], fptr); } fclose(fptr); return 0; }
출력:
위 프로그램은 단일 문자를 fputc_test.txt 문장이 성공적으로 작성되었음을 나타내는 다음 줄 기호 “\n”에 도달할 때까지 파일을 삭제합니다. 프로세스는 배열의 각 문자를 가져와서 파일에 쓰는 것입니다.
- 위 프로그램에서는 쓰기 모드에서 fputc_test.txt라는 파일을 생성하고 열고 파일에 기록될 문자열을 선언했습니다.
- for 루프를 사용하여 문자별로 쓰기 작업을 수행하고 "\n" 문자가 나올 때까지 각 문자를 파일에 넣은 다음 fclose 함수를 사용하여 파일을 닫습니다.
fputs() 함수:
#include <stdio.h> int main() { FILE * fp; fp = fopen("fputs_test.txt", "w+"); fputs("This is Guru99 Tutorial on fputs,", fp); fputs("We don't need to use for loop\n", fp); fputs("Easier than fputc function\n", fp); fclose(fp); return (0); }
출력:
- 위 프로그램에서는 쓰기 모드로 fputs_test.txt라는 파일을 생성하고 오픈했습니다.
- fputs() 함수를 사용하여 세 가지 다른 내용을 작성하여 쓰기 작업을 수행한 후 문자열
- 그런 다음 fclose 함수를 사용하여 파일을 닫습니다.
fprintf()함수:
#include <stdio.h> int main() { FILE *fptr; fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode" /* write to file */ fprintf(fptr, "Learning C with Guru99\n"); fclose(fptr); return 0; }
출력:
- 위 프로그램에서는 쓰기 모드에서 fprintf_test.txt라는 파일을 생성하고 열었습니다.
- fprintf() 함수를 사용하여 문자열을 쓰는 쓰기 작업이 수행된 후, fclose 함수를 사용하여 파일이 닫힙니다.
파일에서 데이터 읽기
파일에서 데이터를 읽는 데 사용되는 세 가지 기능이 있습니다.
- fgetc(파일_포인터): 파일 포인터가 가리키는 파일에서 다음 문자를 반환합니다. 파일 끝에 도달하면 EOF가 다시 전송됩니다.
- fgets(버퍼, n, 파일 포인터): 파일에서 n-1개의 문자를 읽고 문자열을 버퍼에 저장하는데, 버퍼의 마지막 문자에 NULL 문자 '\0'을 추가합니다.
- fscanf(file_pointer, 변환_지정자, 변수_주소): 데이터를 파싱하고 분석하는데 사용됩니다. 파일에서 문자를 읽고 입력을 목록에 할당합니다. 변수 포인터 변환 지정자를 사용하는 Variable_addresses. scanf와 마찬가지로 fscanf는 공백이나 개행 문자가 나타나면 문자열 읽기를 중지합니다.
다음 프로그램은 각각 fgets(), fscanf(), fgetc() 함수를 사용하여 fputs_test.txt 파일에서 읽는 방법을 보여줍니다.
#include <stdio.h> int main() { FILE * file_pointer; char buffer[30], c; file_pointer = fopen("fprintf_test.txt", "r"); printf("----read a line----\n"); fgets(buffer, 50, file_pointer); printf("%s\n", buffer); printf("----read and parse data----\n"); file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer char str1[10], str2[2], str3[20], str4[2]; fscanf(file_pointer, "%s %s %s %s", str1, str2, str3, str4); printf("Read String1 |%s|\n", str1); printf("Read String2 |%s|\n", str2); printf("Read String3 |%s|\n", str3); printf("Read String4 |%s|\n", str4); printf("----read the entire file----\n"); file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer while ((c = getc(file_pointer)) != EOF) printf("%c", c); fclose(file_pointer); return 0; }
결과 :
----read a line---- Learning C with Guru99 ----read and parse data---- Read String1 |Learning| Read String2 |C| Read String3 |with| Read String4 |Guru99| ----read the entire file---- Learning C with Guru99
- 위의 프로그램에서 우리는 이전에 fprintf() 함수를 사용하여 작성된 "fprintf_test.txt"라는 파일을 열었고, 여기에는 "Learning C with Guru99" 문자열이 들어 있습니다. 우리는 fgets() 함수를 사용하여 읽습니다. 이 함수는 줄 단위로 읽는데, 여기서 버퍼 크기는 전체 줄을 처리하기에 충분해야 합니다.
- 파일의 시작 부분을 가리키도록 포인터 파일을 재설정하기 위해 파일을 다시 엽니다. 각 단어를 개별적으로 처리할 수 있는 다양한 문자열 변수를 만듭니다. 변수를 인쇄하여 내용을 확인하세요. fscanf()는 주로 파일에서 데이터를 추출하고 구문 분석하는 데 사용됩니다.
- 파일의 시작 부분을 가리키도록 포인터 파일을 재설정하려면 파일을 다시 엽니다. EOF 문이 나타날 때까지 getc() 함수를 사용하여 파일에서 데이터를 한 문자씩 읽고 인쇄합니다.
- 다양한 변형을 사용하여 파일 읽기 작업을 수행한 뒤, fclose 함수를 사용하여 다시 파일을 닫았습니다.
getc 및 putc를 사용한 대화형 파일 읽기 및 쓰기
이것들은 가장 간단한 파일 작업입니다. Getc는 get character를 의미하고, putc는 put character를 의미합니다. 이 두 함수는 한 번에 하나의 문자만 처리하는 데 사용됩니다.
다음 프로그램은 'C' 프로그래밍에서의 파일 처리 기능을 보여줍니다.
#include <stdio.h> int main() { FILE * fp; char c; printf("File Handling\n"); //open a file fp = fopen("demo.txt", "w"); //writing operation while ((c = getchar()) != EOF) { putc(c, fp); } //close file fclose(fp); printf("Data Entered:\n"); //reading fp = fopen("demo.txt", "r"); while ((c = getc(fp)) != EOF) { printf("%c", c); } fclose(fp); return 0; }
출력:
- 위 프로그램에서는 쓰기 모드에서 데모라는 파일을 생성하고 열었습니다.
- 쓰기 작업이 수행된 후에는 fclose 함수를 사용하여 파일이 닫힙니다.
- 우리는 다시 읽기 모드에서 데이터를 포함하는 파일을 열었습니다. eof가 발견될 때까지 while 루프가 실행됩니다. 파일 끝이 발견되면 작업이 종료되고 printf 함수를 사용하여 데이터가 표시됩니다.
- 읽기 작업을 수행한 후에는 fclose 함수를 사용하여 파일을 다시 닫습니다.
요약
- 파일은 데이터가 저장되는 메모리 공간입니다.
- 'C' 프로그래밍은 파일을 처리하는 다양한 기능을 제공합니다.
- 파일을 조작하는 메커니즘을 파일 관리라고 합니다.
- 파일을 작업하기 전에 먼저 파일을 열어야 합니다.
- 파일은 읽기, 쓰기 또는 추가 모드로 열 수 있습니다.
- Getc 및 putc 함수는 단일 문자를 읽고 쓰는 데 사용됩니다.
- fscanf() 함수는 파일에서 데이터를 읽고 구문 분석하는 것을 허용합니다.
- 우리는 읽을 수 있습니다 (사용하여 getc 함수) EOF가 발견될 때까지 모든 파일을 포함하도록 반복하여 전체 파일
- 함수를 사용하여 이름을 만든 후 파일에 쓸 수 있습니다. fprintf() 문자열 텍스트 끝에 개행 문자가 있어야 합니다.