19 - File
<학습하기>
C프로그램에서의 파일 조작 순서
1. 파일 열기 - 프로그램과 파일을 연결하여 파일에 대한 조작권을 얻는 행위.
파일을 열기 위한 함수
fopen ( );
인수 형식
fopen("파일이름", "모드");
파일이름 : 열고자 하는 파일 이름
모드 : 파일을 어떤 형태로 열 것인지 지정. (쌍따옴표 (")로 감싸인 문자열)
"r"
파일을 읽기 전용으로 열어라.
만약 파일이 없다면 에러처리.
"w"
파일을 쓰기 전용으로 열어라.
만약 같은 이름의 파일이 없다면 새로 만든다.
만약 같은 이름의 파일이 있다면 그 파일을 지우고 새로 만든다.
만약 파일을 열 수 없다면 에러처리.
ex) 읽기 전용
"a"
파일을 쓰기 전용으로 열어라
만약 같은 이름의 파일이 없다면 새로 만든다.
만약 같은 이름의 파일이 있다면 그 파일을 열고 파일 끝에서 쓸 준비를 한다.
만약 파일을 열 수 없다면 에러처리
반환형식 : 구조체 FILE의 포인터.
FILE : 파일 정보를 저장하고 있는 일종의 구조체.
파일이 제대로 열렸다면 열린 파일의 정보를 가지고 있는 FILE의 포인터.
파일 열기에 실패했다면 NULL.
2. 파일 조작 - 파일에 데이터를 쓰거나 파일에서 데이터를 읽는 행위.
3. 파일 닫기 - 파일 조작이 끝났으므로 파일을 정리하고 프로그램과 파일의 연결을 끊는 일.
파일을 닫지 않고 꺼버리면 저장이 다 안될 수 있다.
강제 종료했으나 계속 연결된 상태로 인식될 수도 있음.
기타 등등!
가장 중요하다!!!
파일을 닫는 함수
fclose ( );
인수 형식
fclose (파일 포인터);
파일포인터 : fopen으로 열어서 가지고 있던 FILE의 포인터.
반환 형식
없음.
파일에 대한 모든 함수 정의는 stdio.h에 포함되어 있으므로
#include <stdio.h>가 필요하다.
파일 조작에 대하여
문자열 출력 함수 (string)
puts("문자열");
콘솔로 문자열 출력.
문자열 출력 후 줄바꿈을 한다.
fputs("문자열", 파일포인터);
파일포인터로 지정된 파일로 문자열 출력
문자열 출력 후 줄바꿈을 하지 않는다.
문자열 입력 함수
gets("문자열");
콘솔에서 문자열 입력.
fgets(문자배열, 배열길이, 파일포인터);
파일에서 문자열 입력.
배열길이 -1 까지 읽어서 문자배열에 저장.
문자배열에 입력할 떄 줄바꿈(\n)을 만나거나,
파일 끝에 도달했다면 NULL리턴.
제대로 읽었다면 [문자배열] 리턴.
문자 입력 함수 - 파일에서 문자(char) 하나를 입력하는 함수.
fgetc(파일포인터);
파일에서 문자 하나를 읽는 함수.
반환값은 파일에서 읽은 문자의 ASCII코드값. (정수형)
파일을 다 읽어서 파일 끝에 닿았다면 EOF (End Of File)반환.
문자 출력 함수 : 파일로 문자 하나를 출력하는 함수.
fputc(출력할 문자, 파일포인터);
파일로 문자 하나 출력
출력할 문자는 ASCII코드로 정의된다.
<실습하기>
#include <stdio.h>
//#1
//hello.txt파일을 만들고, 이 파일 안에 다음과 같은 두 문자열을 출력하라.
//Hello, World!
//I am a C programer.
void MakeHelloTxt();
//#2
//이렇게 만든 Hello.txt를 만들고 world.txt파일로 복사하라.
void CopyToWorldTxt();
//#3
//world.txt에서 내용을 읽어 콘솔에 출력하라.
void ReadWorldTxt();
main()
{
//hello.txt를 만들기 위한 함수
MakeHelloTxt();
CopyToWorldTxt();
ReadWorldTxt();
}
void MakeHelloTxt() // Hello.txt를 만들고 문자열을 출력하는 함수.
{
//파일을 연다
FILE *fp = fopen("Hello.txt", "w"); //Hello.txt라는 파일을 쓰기용으로 열기.
//fp라는 포인터 변수에는 파일이라는 구조체 변수가 들어가 있다.
if(fp == NULL) //문제가 있어 파일이 열리 않았을 경우.
{
puts("Hello.txt 열기 실패.");
return;
//?? return;?
}
//파일 조작
fputs("Hello, World!\n",fp);
fputs("I am a C programmer.\n",fp);
//fp에 저장된 파일 "hello,txt"에 출력.
//파일을 닫는다.
fclose(fp);
}
void CopyToWorldTxt()
{
FILE *fpRead;
FILE *fpWrite;
int chr; // 파일에서 읽은 문자를 저장할 변수.for 조작.
//파일 열기
fpRead = fopen("Hello.txt", "r"); //read 모드로 파일 열기.
if(fpRead == NULL)
{
puts("Hello.txt 열기 실패");
return;
}
fpWrite = fopen("world.txt", "w");
if(fpWrite == NULL)
{
puts("world.txt 열기 실패");
//return;
//여기서 그냥 return 하면 안됨..
//위에서 열린 fpRead가 열린채로 남아 있기 때문.
//fpRead는 이미 열러 있으므로 함수 나가기 전에 닫아야 한다.
fclose(fpRead);
return;
}
//파일 조작 : fpRead에서 한글자 읽어 fpWrite로 출력.
//문자 하나를 복사하는 것이니까 계속
//chr = fgetc(fpRead);
//fputc(chr, fpWrite);
//를 반복해야함.
//>>반복문을 쓰자.
while((chr = fgetc(fpRead)) != EOF )
{
fputc(chr, fpWrite);
}
//파일 닫기
fclose(fpRead);
fclose(fpWrite);
}
void ReadWorldTxt()
{
char chrArray [100]; //for 문자열 입력.
//파일 열기
FILE *fp = fopen("world.txt", "r");
if(fp == NULL)
{
puts("파일 열기 실패.");
return;
}
//파일 조작
while(fgets(chrArray, 100 ,fp) != NULL)
{
//puts(chrArray);
//줄바꿈이 보기 싫으면 printf 쓰자.
printf("%s", chrArray);
}
//파일 닫기
}
C프로그램에서의 파일 조작 순서
1. 파일 열기 - 프로그램과 파일을 연결하여 파일에 대한 조작권을 얻는 행위.
파일을 열기 위한 함수
fopen ( );
인수 형식
fopen("파일이름", "모드");
파일이름 : 열고자 하는 파일 이름
모드 : 파일을 어떤 형태로 열 것인지 지정. (쌍따옴표 (")로 감싸인 문자열)
"r"
파일을 읽기 전용으로 열어라.
만약 파일이 없다면 에러처리.
"w"
파일을 쓰기 전용으로 열어라.
만약 같은 이름의 파일이 없다면 새로 만든다.
만약 같은 이름의 파일이 있다면 그 파일을 지우고 새로 만든다.
만약 파일을 열 수 없다면 에러처리.
ex) 읽기 전용
"a"
파일을 쓰기 전용으로 열어라
만약 같은 이름의 파일이 없다면 새로 만든다.
만약 같은 이름의 파일이 있다면 그 파일을 열고 파일 끝에서 쓸 준비를 한다.
만약 파일을 열 수 없다면 에러처리
반환형식 : 구조체 FILE의 포인터.
FILE : 파일 정보를 저장하고 있는 일종의 구조체.
파일이 제대로 열렸다면 열린 파일의 정보를 가지고 있는 FILE의 포인터.
파일 열기에 실패했다면 NULL.
2. 파일 조작 - 파일에 데이터를 쓰거나 파일에서 데이터를 읽는 행위.
3. 파일 닫기 - 파일 조작이 끝났으므로 파일을 정리하고 프로그램과 파일의 연결을 끊는 일.
파일을 닫지 않고 꺼버리면 저장이 다 안될 수 있다.
강제 종료했으나 계속 연결된 상태로 인식될 수도 있음.
기타 등등!
가장 중요하다!!!
파일을 닫는 함수
fclose ( );
인수 형식
fclose (파일 포인터);
파일포인터 : fopen으로 열어서 가지고 있던 FILE의 포인터.
반환 형식
없음.
파일에 대한 모든 함수 정의는 stdio.h에 포함되어 있으므로
#include <stdio.h>가 필요하다.
파일 조작에 대하여
문자열 출력 함수 (string)
puts("문자열");
콘솔로 문자열 출력.
문자열 출력 후 줄바꿈을 한다.
fputs("문자열", 파일포인터);
파일포인터로 지정된 파일로 문자열 출력
문자열 출력 후 줄바꿈을 하지 않는다.
문자열 입력 함수
gets("문자열");
콘솔에서 문자열 입력.
fgets(문자배열, 배열길이, 파일포인터);
파일에서 문자열 입력.
배열길이 -1 까지 읽어서 문자배열에 저장.
문자배열에 입력할 떄 줄바꿈(\n)을 만나거나,
파일 끝에 도달했다면 NULL리턴.
제대로 읽었다면 [문자배열] 리턴.
문자 입력 함수 - 파일에서 문자(char) 하나를 입력하는 함수.
fgetc(파일포인터);
파일에서 문자 하나를 읽는 함수.
반환값은 파일에서 읽은 문자의 ASCII코드값. (정수형)
파일을 다 읽어서 파일 끝에 닿았다면 EOF (End Of File)반환.
문자 출력 함수 : 파일로 문자 하나를 출력하는 함수.
fputc(출력할 문자, 파일포인터);
파일로 문자 하나 출력
출력할 문자는 ASCII코드로 정의된다.
<실습하기>
#include <stdio.h>
//#1
//hello.txt파일을 만들고, 이 파일 안에 다음과 같은 두 문자열을 출력하라.
//Hello, World!
//I am a C programer.
void MakeHelloTxt();
//#2
//이렇게 만든 Hello.txt를 만들고 world.txt파일로 복사하라.
void CopyToWorldTxt();
//#3
//world.txt에서 내용을 읽어 콘솔에 출력하라.
void ReadWorldTxt();
main()
{
//hello.txt를 만들기 위한 함수
MakeHelloTxt();
CopyToWorldTxt();
ReadWorldTxt();
}
void MakeHelloTxt() // Hello.txt를 만들고 문자열을 출력하는 함수.
{
//파일을 연다
FILE *fp = fopen("Hello.txt", "w"); //Hello.txt라는 파일을 쓰기용으로 열기.
//fp라는 포인터 변수에는 파일이라는 구조체 변수가 들어가 있다.
if(fp == NULL) //문제가 있어 파일이 열리 않았을 경우.
{
puts("Hello.txt 열기 실패.");
return;
//?? return;?
}
//파일 조작
fputs("Hello, World!\n",fp);
fputs("I am a C programmer.\n",fp);
//fp에 저장된 파일 "hello,txt"에 출력.
//파일을 닫는다.
fclose(fp);
}
void CopyToWorldTxt()
{
FILE *fpRead;
FILE *fpWrite;
int chr; // 파일에서 읽은 문자를 저장할 변수.for 조작.
//파일 열기
fpRead = fopen("Hello.txt", "r"); //read 모드로 파일 열기.
if(fpRead == NULL)
{
puts("Hello.txt 열기 실패");
return;
}
fpWrite = fopen("world.txt", "w");
if(fpWrite == NULL)
{
puts("world.txt 열기 실패");
//return;
//여기서 그냥 return 하면 안됨..
//위에서 열린 fpRead가 열린채로 남아 있기 때문.
//fpRead는 이미 열러 있으므로 함수 나가기 전에 닫아야 한다.
fclose(fpRead);
return;
}
//파일 조작 : fpRead에서 한글자 읽어 fpWrite로 출력.
//문자 하나를 복사하는 것이니까 계속
//chr = fgetc(fpRead);
//fputc(chr, fpWrite);
//를 반복해야함.
//>>반복문을 쓰자.
while((chr = fgetc(fpRead)) != EOF )
{
fputc(chr, fpWrite);
}
//파일 닫기
fclose(fpRead);
fclose(fpWrite);
}
void ReadWorldTxt()
{
char chrArray [100]; //for 문자열 입력.
//파일 열기
FILE *fp = fopen("world.txt", "r");
if(fp == NULL)
{
puts("파일 열기 실패.");
return;
}
//파일 조작
while(fgets(chrArray, 100 ,fp) != NULL)
{
//puts(chrArray);
//줄바꿈이 보기 싫으면 printf 쓰자.
printf("%s", chrArray);
}
//파일 닫기
}
댓글
댓글 쓰기