어디서 발췌했는지 기억이 --;
헤더 파일 : fopen - stdio.h, _wfopen - stdio.h 또는 wchar.h
기능 : 파일을 연다.
더 안전한 버전 : fopen_s, _wfopen_s
Syntax : FILE *fopen(const char *filename, const char *mode);
FILE *_wfopen(const wchar_t *filename, const wchar_t *mode);
매개 변수 :
filename - 파일 이름
mode - 파일 접근 방식
리턴 값 : 열린 파일에 포인터를 반환한다. 오류가 발생할 경우 null 포인터값이 반환된다.
참고 :
fopen 함수는 지정된 파일 이름을 가진 파일을 연다. _wfopen은 fopen의 확장 문자 버전이며, 그 밖의 기능은 모두 같다. 단순히 _wfopen 함수를 사용하는 것으로는 파일 스트림에서 사용한 문자세트에 영향을 주지 않는다.
파일 접근 방식 ---
"r" : 파일을 읽기 위해 연다. 파일이 없거나 찾을 수 없을 경우 함수는 실행되지 않는다.
"w" : 파일을 쓰기 위해 연다. 파일이 이미 존재할 경우 그 파일에 저장되었던 내용은 사라진다.
"a" : 파일을 쓰기 위해 연다. 파일이 이미 존재할 경우 그 파일의 끝부분에서부터 새로 내용을 쓴다.
"r+" : 파일을 읽고 쓰기 위해 연다. 파일은 반드시 있어야 한다.
"w+" : 파일을 읽고 쓰기 위해 연다. 파일이 이미 존재할 경우 그 파일에 저장되었던 내용은 사라진다.
"a+" : 파일을 읽고 쓰기 위해 연다. 파일이 이미 존재할 경우 그 파일의 끝부분에서부터 새로 내용을 쓴다.
"a"나 "a+"로 파일을 열 때 쓰기 작업은 파일의 끝부분에서 시작한다. 파일 포인터는 fseek이나 rewind 함수로 이동시킬 수 있지만 쓰기 작업 이전에는 포인터가 파일 끝으로 되돌아간다. 그래서
존재하는 데이터는 덮어쓸 수 없다.
w랑 w+의 차이가 그래서 머라는거야?-_-;
Example ==========
소스 코드 -----
#include <stdio.h>
FILE *stream, *stream2;
void main()
{
int numclosed;
// 파일을 읽기 위해 연다.
if( ( stream = fopen( "test.txt", "r" )) == NULL )
printf( "파일 열기 실패 : test.txt\n" );
else
printf( "파일 열기 성공 : test.txt\n" );
// 파일을 쓰기 위해 연다.
if( ( stream2 = fopen( "test2.txt", "w+" )) == NULL )
printf( "파일 열기 실패 : test2.txt\n" );
else
printf( "파일 열기 성공 : test2.txt\n" );
// 스트림이 닫혔을까? NULL이 아니면 아직 안 닫힘 so 지금 닫는다.
if ( stream )
{
if ( fclose( stream ) ) // 파일을 닫는 함수
{
printf( "아직 안 닫힌 파일을 방금 닫았어 : test.txt\n" );
}
}
// 나머지를 닫는다.
numclosed = _fcloseall( );
printf( "_fcloseall 함수로 닫은 파일의 수 : %u\n", numclosed );
}
출력 -----
파일 열기 성공 : test.txt
파일 열기 성공 : test2.txt
_fcloseall 함수로 닫은 파일의 수 : 1
'프로그래밍 > VC++ 개발 코딩' 카테고리의 다른 글
CreateThread후 바로 CloseHandle하는 이유 (0) | 2014.01.17 |
---|---|
특정 warning 무시하기 (0) | 2014.01.17 |
Win7 64Bit에서 VC6.0 디버그시 프로세스 살아있는 문제 해결안 (0) | 2014.01.17 |
VC Build 명령시 계속 Re-Build될때 (0) | 2014.01.17 |
LINK : warning LNK4098 /NODEFAULTLIB:library (0) | 2014.01.17 |