[C Question] 파일입출력
카테고리: c-question-lv1
1. 기본 예제
1-1. 읽기와 쓰기 ( 기본 )
#include <stdio.h>
int main()
{
/*
simple.txt 쓰기 용도로 스트림 생성. fp
만약에 스트림 생성에 실패하면 puts로 파일 오픈 실패 출력하고 프로그램 종료
simple.txt에 A쓰기
simple.txt에 B쓰기
simple.txt에 My name is Ho쓰기
simple.txt에 Yuor name is No쓰기
fclose로 스트림 소멸
////////////////////////////////////////////////////////////////////////////////
simple.txt 읽기읽어서 화면에 출력
*/
FILE* fp;
if (fopen_s(&fp, "C:\\cTest\\simple.txt", "wt") != 0)
{
puts("파일 오픈 실패");
return -1;
}
fputc('A', fp);
fputc('B', fp);
fputs("My name is Ho \n", fp);
fputs("Your name is No \n", fp);
fclose(fp);
////////////////////////////////////////////////////////////////////////////////
char temp[100];
if (fopen_s(&fp, "C:\\cTest\\simple.txt", "rt") != 0)
{
puts("파일 오픈 실패");
return -1;
}
// 쓰는 것도 4번 -> 읽는 것도 4번
printf("%c", fgetc(fp));
printf("%c", fgetc(fp));
printf("%s", fgets(temp, sizeof(temp), fp)); // 배열의 이름은 첫번째 요소의 주소값 !!
printf("%s", fgets(temp, sizeof(temp), fp));
// 반복문 버전
/*int i;
for (i = 0; i < 2; i++)
printf("%s", fgets(&temp, 100, fp));*/
fclose(fp);
return 0;
1-2. feof 함수 사용
// start
// #include "header.h"
#include <stdio.h>
int main()
{
/*
src.txt를 읽기 모드. 지시자 이름 src
des.txt를 쓰기 모드. 지시자 이름 des
src든 des든 못 열면 "파일 오픈 실패" 출력하고 프로그램 종료
src로부터 한 글자씩 읽어서 des에 저장(반복문 while사용)
파일 끝까지 잘 되었다면 "파일 복사 완료"출력. puts
파일 끝까지 잘 안 되었다면 "파일 복사 실패"출력. puts
리소스 반환
*/
FILE* src, * des;
// FILE;
// 합친거
if (fopen_s(&src, "C:\\cTest\\src.txt", "rt") != 0 || fopen_s(&des, "C:\\cTest\\des.txt", "wt") != 0)
{
puts("파일 오픈 실패!!");
return -1;
}
// 나눈거
/*if (fopen_s(&src, "C:\\cTest\\src.txt", "rt") != 0)
{
puts("파일 오픈 실패");
return -1;
}
if (fopen_s(&des, "C:\\cTest\\des.txt", "wt") != 0)
{
puts("파일 오픈 실패");
return -1;
}*/
// while은 그저 복사할 뿐
// feof(src) == 0 이건 판단할 때만 쓰기
int temp = 0;
while ((temp = fgetc(src)) != EOF)
fputc(temp, des);
if (feof(src) == 0)
{
puts("파일 복사 실패");
return -1;
}
puts("파일 복사 완료");
/* 문제점
1. des.txt 파일안에 src.txt의 마지막 NULL값도 가져온 듯 하다.
조건을 제대로 해주니 NULL을 가져오지 않았다 !
2. 파일 복사 실패를 구분하는 방법을 모르겠다.
feof(src) == 0 으로 해결보았다.
*/
fclose(src);
fclose(des);
return 0;
}
1-3. 바이너리 예제 ( 이건 풀어야 함)
// start
// #include "header.h"
#include <stdio.h>
int main()
{
/*
이 상태에서 파일의 이미지를 복사 붙여넣기 해보시오 !
*/
// 선언
FILE* src, * des;
errno_t src_err, des_err;
src_err =
des_err =
// 예외
if (src_err != 0 || des_err != 0)
{
puts("파일 오픈 실패!!");
return -1;
}
int buf[5];
int i;
int temp;
while ( )
if ( )
{
puts("파일 복사 실패");
return -1;
}
puts("파일 복사 완료");
fclose(src);
fclose(des);
return 0;
}
댓글 남기기