fopen, _wfopenfopen, _wfopen

파일을 엽니다.Opens a file. 추가 매개 변수 유효성 검사를 수행하고 오류 코드를 반환하는 이 함수의 더 안전한 버전을 사용할 수 있습니다. fopen_s, _wfopen_s를 참조하세요.More-secure versions of these functions that perform additional parameter validation and return error codes are available; see fopen_s, _wfopen_s.

구문Syntax

FILE *fopen(
   const char *filename,
   const char *mode
);
FILE *_wfopen(
   const wchar_t *filename,
   const wchar_t *mode
);

매개 변수Parameters

filenamefilename
파일 이름.File name.

모드mode
사용할 수 있는 액세스 종류입니다.Kind of access that's enabled.

반환 값Return Value

각 함수는 열린 파일에 대한 포인터를 반환합니다.Each of these functions returns a pointer to the open file. null 포인터 값은 오류를 나타냅니다.A null pointer value indicates an error. 하는 경우 filename 또는 모드 됩니다 NULL 빈 문자열인 경우 이러한 함수에서 설명 하는 잘못 된 매개 변수 처리기를 트리거할 매개 변수 유효성 검사합니다.If filename or mode is NULL or an empty string, these functions trigger the invalid parameter handler, which is described in Parameter Validation. 실행을 계속 하도록 허용 된 경우 이러한 함수는 반환 NULL 설정 errnoEINVAL합니다.If execution is allowed to continue, these functions return NULL and set errno to EINVAL.

자세한 내용은 errno, _doserrno, _sys_errlist, and _sys_nerr을 참조하세요.For more information, see errno, _doserrno, _sys_errlist, and _sys_nerr.

설명Remarks

합니다 fopen 함수에 지정 된 파일을 엽니다 filename합니다.The fopen function opens the file that is specified by filename. 기본적으로 반각 filename 문자열은 ANSI 코드 페이지 (CP_ACP)를 사용 하 여 해석 됩니다.By default, a narrow filename string is interpreted using the ANSI codepage (CP_ACP). Windows 데스크톱 응용 프로그램에서 이 페이지를 SetFileApisToOEM 함수를 사용하여 OEM 코드 페이지(CP_OEMCP)로 변경할 수 있습니다.In Windows Desktop applications this can be changed to the OEM codepage (CP_OEMCP) by using the SetFileApisToOEM function. 사용할 수는 AreFileApisANSI 함수를 여부를 filename ANSI 또는 시스템의 기본 OEM 코드 페이지를 사용 하 여 해석 됩니다.You can use the AreFileApisANSI function to determine whether filename is interpreted using the ANSI or the system default OEM codepage. _wfopen 의 와이드 문자 버전이 fopen;에 대 한 인수 _wfopen 는 와이드 문자 문자열입니다._wfopen is a wide-character version of fopen; the arguments to _wfopen are wide-character strings. 그렇지 않으면 _wfopen 하 고 fopen 동일 하 게 작동 합니다.Otherwise, _wfopen and fopen behave identically. 사용 하 여 방금 _wfopen 파일 스트림에 사용 되는 코딩 된 문자 집합에는 영향을 주지 않습니다.Just using _wfopen does not affect the coded character set that is used in the file stream.

fopen 실행 시점에 파일 시스템에 유효한 경로 허용 합니다. fopen UNC 경로 및 경로 관련 된 코드를 실행 하는 시스템에 공유에 액세스할 수 있는 매핑된 네트워크 드라이브 또는 매핑된 드라이브는 실행 시간을 허용 합니다.fopen accepts paths that are valid on the file system at the point of execution; fopen accepts UNC paths and paths that involve mapped network drives as long as the system that executes the code has access to the share or mapped drive at the time of execution. 에 대 한 경로 생성할 때 fopen, 드라이브, 경로 또는 네트워크 공유 수 있는 실행 환경에 있는지 확인 합니다.When you construct paths for fopen, make sure that drives, paths, or network shares will be available in the execution environment. 슬래시(/) 또는 백슬래시(\)를 경로의 디렉터리 구분 기호로 사용할 수 있습니다.You can use either forward slashes (/) or backslashes (\) as the directory separators in a path.

파일에서 추가 작업을 수행하기 전에 항상 반환 값을 검사하여 포인터가 NULL인지 여부를 확인하세요.Always check the return value to see whether the pointer is NULL before you perform any additional operations on the file. 전역 변수는 오류가 발생 하는 경우 errno 설정 되 고 특정 오류 정보를 가져오는 데 사용할 수 있습니다.If an error occurs, the global variable errno is set and may be used to obtain specific error information. 자세한 내용은 errno, _doserrno, _sys_errlist, and _sys_nerr을 참조하세요.For more information, see errno, _doserrno, _sys_errlist, and _sys_nerr.

유니코드 지원Unicode Support

fopen 은 유니코드 파일 스트림을 지원 합니다.fopen supports Unicode file streams. 전달 유니코드 파일을 여는 ccs 원하는 인코딩을 지정 하는 플래그 fopen다음과 같이 합니다.To open a Unicode file, pass a ccs flag that specifies the desired encoding to fopen, as follows.

*파일 *fp fopen = ("newfile.txt", "rt + ccs =인코딩");**FILE *fp = fopen("newfile.txt", "rt+, ccs=encoding");*

값이 허용 인코딩 됩니다 유니코드u t F-8, 및 u t F-16LE합니다.Allowed values of encoding are UNICODE, UTF-8, and UTF-16LE.

유니코드 모드에서 파일을 열면 입력된 함수 형식으로 저장 하는 utf-16 데이터 파일에서 읽은 데이터를 변환 wchar_t합니다.When a file is opened in Unicode mode, input functions translate the data that's read from the file into UTF-16 data stored as type wchar_t. 유니코드 모드에서 연 파일에 쓰는 함수는 형식으로 저장 하는 utf-16 데이터가 포함 된 버퍼를 예상 wchar_t합니다.Functions that write to a file opened in Unicode mode expect buffers that contain UTF-16 data stored as type wchar_t. 이 파일이 UTF-8로 인코딩되면 UTF-16 데이터는 쓸 때 UTF-8로 변환되고 이 파일의 UTF-8로 인코딩된 내용은 읽을 때 UTF-16으로 변환됩니다.If the file is encoded as UTF-8, then UTF-16 data is translated into UTF-8 when it is written, and the file's UTF-8-encoded content is translated into UTF-16 when it is read. 유니코드 모드에서 홀수 바이트를 읽거나 쓰려고 하면 매개 변수 유효성 검사 오류가 발생합니다.An attempt to read or write an odd number of bytes in Unicode mode causes a parameter validation error. 프로그램에 UTF-8로 저장된 데이터를 읽거나 쓰려는 경우 유니코드 모드 대신 텍스트 또는 이진 파일 모드를 사용합니다.To read or write data that's stored in your program as UTF-8, use a text or binary file mode instead of a Unicode mode. 필수 인코딩은 사용자가 변환해야 합니다.You are responsible for any required encoding translation.

파일이 이미 있고 읽기 또는 추가용으로 열려 있는 경우 BOM(바이트 순서 표시)(파일에 있는 경우)에 따라 인코딩이 결정됩니다.If the file already exists and is opened for reading or appending, the Byte Order Mark (BOM), if it present in the file, determines the encoding. BOM 인코딩이 우선 인코딩을 통해 지정 된 된 ccs 플래그입니다.The BOM encoding takes precedence over the encoding that is specified by the ccs flag. 합니다 ccs 없습니다 BOM이 없거나 파일이 새 파일을 하는 경우에 사용은 인코딩.The ccs encoding is only used when no BOM is present or the file is a new file.

참고

BOM 검색 유니코드 모드로 열려 있는 파일에만 적용 됩니다 (즉, 전달 하는 ccs 플래그).BOM detection only applies to files that are opened in Unicode mode (that is, by passing the ccs flag).

다음 표에서 다양 한에 사용 되는 모드 ccs 에 지정 된 플래그 fopen 및 파일에 바이트 순서 표시 합니다.The following table summarizes the modes that are used for various ccs flags given to fopen and Byte Order Marks in the file.

ccs 플래그 및 BOM을 기반으로 사용되는 인코딩Encodings Used Based on ccs Flag and BOM

ccs 플래그ccs flag BOM이 없거나 새 파일No BOM (or new file) BOM: UTF-8BOM: UTF-8 BOM: UTF-16BOM: UTF-16
유니코드UNICODE UTF-16LEUTF-16LE U T F-8UTF-8 UTF-16LEUTF-16LE
U T F-8UTF-8 U T F-8UTF-8 U T F-8UTF-8 UTF-16LEUTF-16LE
UTF-16LEUTF-16LE UTF-16LEUTF-16LE U T F-8UTF-8 UTF-16LEUTF-16LE

유니코드 모드에서 쓰도록 파일을 열면 BOM이 파일에 자동으로 기록됩니다.Files opened for writing in Unicode mode have a BOM written to them automatically.

하는 경우 모드 됩니다 "을 ccs =인코딩"fopen 먼저 읽기를 사용 하 여 파일을 열려고 시도 및 쓰기 액세스 합니다.If mode is "a, ccs=encoding", fopen first tries to open the file by using both read and write access. 성공하면 BOM을 읽고 파일에 대한 인코딩을 결정하고, 실패하면 파일에 대한 기본 인코딩을 사용합니다.If this succeeds, the function reads the BOM to determine the encoding for the file; if this fails, the function uses the default encoding for the file. 두 경우 모두 fopen 다시 쓰기 전용 액세스를 사용 하 여 파일을 엽니다 다음 됩니다.In either case, fopen will then re-open the file by using write-only access. (이 적용 됩니다 "a" 모드에 대해서만 없습니다 "a +" 모드입니다.)(This applies to "a" mode only, not to "a+" mode.)

제네릭 텍스트 루틴 매핑Generic-Text Routine Mappings

TCHAR.H 루틴TCHAR.H routine _UNICODE 및 _MBCS 정의되지 않음_UNICODE & _MBCS not defined _MBCS 정의됨_MBCS defined _UNICODE 정의됨_UNICODE defined
_tfopen_tfopen fopenfopen fopenfopen _wfopen_wfopen

문자열 모드 다음과 같이 파일에 대해 요청 되는 액세스의 종류를 지정 합니다.The character string mode specifies the kind of access that is requested for the file, as follows.

모드mode 액세스Access
"r""r" 읽기 위해 엽니다.Opens for reading. 파일이 존재 하지 않거나 찾을 수 없는 경우는 fopen 호출이 실패 합니다.If the file does not exist or cannot be found, the fopen call fails.
"w""w" 쓰기 위해 빈 파일을 엽니다.Opens an empty file for writing. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다.If the given file exists, its contents are destroyed.
"a""a" 새 데이터를 파일에 쓰기 전에 EOF(파일 끝) 표식을 제거하지 않고 파일의 끝에 쓰기(추가)하기 위해 엽니다.Opens for writing at the end of the file (appending) without removing the end-of-file (EOF) marker before new data is written to the file. 파일이 없는 경우 파일을 만듭니다.Creates the file if it does not exist.
"r+""r+" 읽고 쓰기 위해 엽니다.Opens for both reading and writing. 파일이 있어야 합니다.The file must exist.
"w+""w+" 읽고 쓰기 위해 빈 파일을 엽니다.Opens an empty file for both reading and writing. 파일이 있으면 이 파일의 내용은 삭제됩니다.If the file exists, its contents are destroyed.
"a+""a+" 읽고 추가하기 위해 엽니다.Opens for reading and appending. 추가 작업에는 새 데이터를 파일에 쓰기 전에 EOF 표식을 제거하는 작업이 포함됩니다.The appending operation includes the removal of the EOF marker before new data is written to the file. 쓰기 완료 후 EOF 표식이 복원되지 않습니다.The EOF marker is not restored after writing is completed. 파일이 없는 경우 파일을 만듭니다.Creates the file if it does not exist.

사용 하 여 파일을 열면 합니다 "a" 액세스 형식 또는 "a +" 액세스 형식을 모든 쓰기 작업이 파일 끝에 발생 합니다.When a file is opened by using the "a" access type or the "a+" access type, all write operations occur at the end of the file. 사용 하 여 파일 포인터 위치를 변경할 수 있습니다 fseek 또는 rewind, 하면서도 항상 이동 다시 파일의 끝에 쓰기 작업을 수행 하기 전에 합니다.The file pointer can be repositioned by using fseek or rewind, but is always moved back to the end of the file before any write operation is performed. 따라서 기존 데이터를 덮어쓸 수 없습니다.Therefore, existing data cannot be overwritten.

합니다 "a" 모드 파일에 추가 하기 전에 EOF 표식을 제거 하지 않습니다.The "a" mode does not remove the EOF marker before it appends to the file. 추가 작업이 수행된 이후에는 MS-DOS TYPE 명령은 원래 EOF 표식까지만 데이터를 표시하고 파일에 추가된 데이터는 표시하지 않습니다.After appending has occurred, the MS-DOS TYPE command only shows data up to the original EOF marker and not any data appended to the file. 추가 파일을 하기 전에 합니다 "a +" 모드에서는 EOF 표식을 제거 합니다.Before it appends to the file, the "a+" mode does remove the EOF marker. 추가 후에는 MS-DOS TYPE 명령으로 파일의 모든 데이터를 표시합니다.After appending, the MS-DOS TYPE command shows all data in the file. 합니다 "a +" 모드가 CTRL + Z EOF 표식으로 종료 되는 스트림 파일에 추가 해야 합니다.The "a+" mode is required for appending to a stream file that is terminated with the CTRL+Z EOF marker.

경우는 "r +", "w +", 또는 "a +" 액세스 형식을 지정한 경우 읽기와 쓰기가 모두 활성화 됩니다 (파일이 "업데이트"에 대해 열려야 하 라고 합니다).When the "r+", "w+", or "a+" access type is specified, both reading and writing are enabled (the file is said to be open for "update"). 하지만 읽기에서 쓰기로 전환할 경우 입력 작업 시 EOF 표식이 필요합니다.However, when you switch from reading to writing, the input operation must encounter an EOF marker. EOF가 없는 경우 사이에 파일 위치 지정 함수를 호출해야 합니다.If there is no EOF, you must use an intervening call to a file positioning function. 파일 위치 지정 함수는 fsetpos하십시오 fseek, 및 rewind합니다.The file positioning functions are fsetpos, fseek, and rewind. 쓰기에서 읽기로 전환 하면 대 한 중간 호출을 사용 해야 합니다 fflush 또는 파일 위치 지정 함수입니다.When you switch from writing to reading, you must use an intervening call to either fflush or to a file positioning function.

이전 값 이외에 다음 문자를 추가할 수 있습니다 모드 줄 바꿈 문자에 대 한 변환 모드를 지정 합니다.In addition to the earlier values, the following characters can be appended to mode to specify the translation mode for newline characters.

모드 한정자mode modifier 변환 모드Translation mode
tt 텍스트(변환됨) 모드에서 엽니다.Open in text (translated) mode.
bb 이진(변환되지 않음) 모드에서 엽니다. 캐리지 리턴 및 줄 바꿈 문자를 포함하는 변환은 표시되지 않습니다.Open in binary (untranslated) mode; translations involving carriage-return and linefeed characters are suppressed.

텍스트 모드에서 CTRL + Z는 입력에서 EOF 문자로 해석 됩니다.In text mode, CTRL+Z is interpreted as an EOF character on input. 연 파일을 사용 하 여 읽기/쓰기용 "a +"fopen 파일의 끝에 CTRL + Z가 있는지 확인 하 고 가능 하다 면이 제거 합니다.In files that are opened for reading/writing by using "a+", fopen checks for a CTRL+Z at the end of the file and removes it, if it is possible. 사용 하기 때문에 이렇게 fseek 하 고 ftell 는 CTRL + Z로 끝나는 파일 내에서 이동할 fseek 파일 끝 근처에 제대로 동작 하지.This is done because using fseek and ftell to move within a file that ends with CTRL+Z may cause fseek to behave incorrectly near the end of the file.

텍스트 모드에서 캐리지 리턴-줄 바꿈 조합은 입력 시 단일 줄 바꿈으로 변환 되 고 줄 바꿈 문자는 출력에서 캐리지 리턴-줄 바꿈 조합으로 변환 됩니다.In text mode, carriage return-linefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage return-linefeed combinations on output. 유니코드 스트림 I/O 함수가 텍스트 모드에서 작동할 경우(기본값) 소스 또는 대상 스트림은 멀티바이트 문자 시퀀스로 간주됩니다.When a Unicode stream-I/O function operates in text mode (the default), the source or destination stream is assumed to be a sequence of multibyte characters. 따라서 유니코드 스트림 입력 함수는 mbtowc 함수 호출과 마찬가지로 멀티바이트 문자를 와이드 문자로 변환합니다.Therefore, the Unicode stream-input functions convert multibyte characters to wide characters (as if by a call to the mbtowc function). 동일한 이유로 유니코드 스트림 출력 함수는 wctomb 함수 호출과 마찬가지로 와이드 문자를 멀티바이트 문자로 변환합니다.For the same reason, the Unicode stream-output functions convert wide characters to multibyte characters (as if by a call to the wctomb function).

하는 경우 t 하거나 b 제공 되지 않습니다 모드, 기본 변환 모드는 전역 변수를 정의한 _fmode합니다.If t or b is not given in mode, the default translation mode is defined by the global variable _fmode. 하는 경우 t 하거나 b 맨 앞에 인수, 함수가 실패 하며 반환 NULL합니다.If t or b is prefixed to the argument, the function fails and returns NULL.

유니코드 및 멀티바이트 스트림 I/O에서 텍스트 모드 및 이진 모드를 사용하는 방법에 대한 자세한 내용은 Text and Binary Mode File I/OUnicode Stream I/O in Text and Binary Modes를 참조하세요.For more information about how to use text and binary modes in Unicode and multibyte stream-I/O, see Text and Binary Mode File I/O and Unicode Stream I/O in Text and Binary Modes.

다음 옵션을 추가할 수 있습니다 모드 추가 동작을 지정 합니다.The following options can be appended to mode to specify additional behaviors.

모드 한정자mode modifier 동작Behavior
cc 연결 된 커밋 플래그를 사용 filename 파일 버퍼의 내용을 디스크에 직접 기록 되도록 fflush 하거나 _flushall 라고 합니다.Enable the commit flag for the associated filename so that the contents of the file buffer are written directly to disk if either fflush or _flushall is called.
nn 연결 된 커밋 플래그를 재설정 filename "커밋 안 함."를Reset the commit flag for the associated filename to "no-commit." 이 값이 기본값입니다.This is the default. 또한 프로그램을 COMMODE.OBJ와 연결할 경우 전역 커밋 플래그를 재정의합니다.It also overrides the global commit flag if you link your program with COMMODE.OBJ. 프로그램을 COMMODE.OBJ와 명시적으로 연결하지 않을 경우 전역 커밋 플래그 기본값은 "커밋 안 함"입니다( Link Options참조).The global commit flag default is "no-commit" unless you explicitly link your program with COMMODE.OBJ (see Link Options).
NN 자식 프로세스에서 파일을 상속하지 않도록 지정합니다.Specifies that the file is not inherited by child processes.
SS 캐싱이 디스크에서 순차적 액세스를 위해 최적화되며 이에 제한되지 않습니다.Specifies that caching is optimized for, but not restricted to, sequential access from disk.
RR 캐싱이 디스크에서 임의 액세스를 위해 최적화되며 이에 제한되지 않습니다.Specifies that caching is optimized for, but not restricted to, random access from disk.
TT 파일을 임시 파일로 지정합니다.Specifies a file as temporary. 가능하면 디스크에 플러시되지 않습니다.If possible, it is not flushed to disk.
DD 파일을 임시 파일로 지정합니다.Specifies a file as temporary. 마지막 파일 포인터를 닫을 때 삭제됩니다.It is deleted when the last file pointer is closed.
ccs =인코딩ccs=encoding 사용 하도록 설정 하는 인코딩된 문자를 지정 합니다 (중 하나 u t F-8u t F-16LE, 또는 유니코드)이이 파일에 대 한 합니다.Specifies the encoded character set to use (one of UTF-8, UTF-16LE, or UNICODE) for this file. ANSI 인코딩을 원할 경우 지정되지 않은 상태로 둡니다.Leave unspecified if you want ANSI encoding.

에 유효한 문자는 모드 에 사용 되는 문자열 fopen 하 고 _fdopen 에 해당 oflag 에사용되는인수_open 하 고 _sopen다음과 같이 합니다.Valid characters for the mode string that is used in fopen and _fdopen correspond to oflag arguments that are used in _open and _sopen, as follows.

문자 모드 문자열Characters in mode string 동등한 oflag 열기 (_o) / _sopen 값Equivalent oflag value for _open/_sopen
aa _O_WRONLY | _O_APPEND (일반적으로 _O_WRONLY | _O_CREAT |* * _O_APPEND * )_O_WRONLY* | _O_APPEND (usually _O_WRONLY | _O_CREAT |** _O_APPEND**)
+a+ _O_RDWR | _O_APPEND (일반적으로 _O_RDWR | _O_APPEND | _O_CREAT )_O_RDWR | _O_APPEND (usually _O_RDWR | _O_APPEND | _O_CREAT )
rr _O_RDONLY_O_RDONLY
r +r+ _O_RDWR_O_RDWR
ww _O_WRONLY (일반적으로 _O_WRONLY | _O_CREAT |* * _O_TRUNC * )_O_WRONLY* (usually _O_WRONLY | _O_CREAT |** _O_TRUNC**)
w +w+ _O_RDWR (일반적으로 _O_RDWR | _O_CREAT | _O_TRUNC)_O_RDWR (usually _O_RDWR | _O_CREAT | _O_TRUNC)
bb _O_BINARY_O_BINARY
tt _O_TEXT_O_TEXT
cc 없음None
nn 없음None
SS _O_SEQUENTIAL_O_SEQUENTIAL
RR _O_RANDOM_O_RANDOM
TT _O_SHORTLIVED_O_SHORTLIVED
DD _O_TEMPORARY_O_TEMPORARY
ccs 유니코드 =ccs=UNICODE _O_WTEXT_O_WTEXT
ccs = u t F-8ccs=UTF-8 _O_UTF8_O_UTF8
ccs = u t F-16LEccs=UTF-16LE _O_UTF16_O_UTF16

사용 중인 경우 rb 모드 필요가 없습니다 코드 이식 및 큰 파일의 대부분을 읽어야 하거나 네트워크 성능에 신경을 쓰지 않는 경우 고려할 수도 있습니다 있는지 여부를 메모리를 사용 하도록 매핑된 Win32 파일 옵션으로 합니다.If you are using rb mode, you do not have to port your code, and if you expect to read most of a large file or are not concerned about network performance, you might also consider whether to use memory mapped Win32 files as an option.

요구 사항Requirements

기능Function 필수 헤더Required header
fopenfopen <stdio.h><stdio.h>
_wfopen_wfopen <stdio.h> 또는 <wchar.h><stdio.h> or <wchar.h>

_wfopen Microsoft 확장입니다._wfopen is a Microsoft extension. 호환성에 대한 자세한 내용은 호환성을 참조하세요.For more information about compatibility, see Compatibility.

c, ntSRT, 및 D 모드 옵션에 대 한 Microsoft 확장은 fopen 하 고 _fdopen ANSI 이식성이 필요한 곳 사용할 수 없습니다.The c, n, t, S, R, T, and D mode options are Microsoft extensions for fopen and _fdopen and should not be used where ANSI portability is desired.

예제 1Example 1

다음 프로그램은 두 파일을 엽니다.The following program opens two files. 사용 하 여 fclose 첫 번째 파일을 닫을 수와 _fcloseall 모든 나머지 파일을 닫아야 합니다.It uses fclose to close the first file and _fcloseall to close all remaining files.

// crt_fopen.c
// compile with: /W3
// This program opens two files. It uses
// fclose to close the first file and
// _fcloseall to close all remaining files.

#include <stdio.h>

FILE *stream, *stream2;

int main( void )
{
   int numclosed;

   // Open for read (will fail if file "crt_fopen.c" does not exist)
   if( (stream  = fopen( "crt_fopen.c", "r" )) == NULL ) // C4996
   // Note: fopen is deprecated; consider using fopen_s instead
      printf( "The file 'crt_fopen.c' was not opened\n" );
   else
      printf( "The file 'crt_fopen.c' was opened\n" );

   // Open for write
   if( (stream2 = fopen( "data2", "w+" )) == NULL ) // C4996
      printf( "The file 'data2' was not opened\n" );
   else
      printf( "The file 'data2' was opened\n" );

   // Close stream if it is not NULL
   if( stream)
   {
      if ( fclose( stream ) )
      {
         printf( "The file 'crt_fopen.c' was not closed\n" );
      }
   }

   // All other files are closed:
   numclosed = _fcloseall( );
   printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}
The file 'crt_fopen.c' was opened
The file 'data2' was opened
Number of files closed by _fcloseall: 1

예제 2Example 2

다음 프로그램은 텍스트 모드에서 유니코드 인코딩을 포함하는 파일을 만들거나 덮어씁니다(파일이 있는 경우).The following program creates a file (or overwrites one if it exists), in text mode that has Unicode encoding. 그런 다음 파일에 두 문자열을 쓰고 파일을 닫습니다.It then writes two strings into the file and closes the file. 출력 파일은 _wfopen_test.xml이며, 출력 섹션의 데이터를 포함합니다.The output is a file named _wfopen_test.xml, which contains the data from the output section.

// crt__wfopen.c
// compile with: /W3
// This program creates a file (or overwrites one if
// it exists), in text mode using Unicode encoding.
// It then writes two strings into the file
// and then closes the file.

#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <wchar.h>

#define BUFFER_SIZE 50

int main(int argc, char** argv)
{
    wchar_t str[BUFFER_SIZE];
    size_t  strSize;
    FILE*   fileHandle;

    // Create an the xml file in text and Unicode encoding mode.
    if ((fileHandle = _wfopen( L"_wfopen_test.xml",L"wt+,ccs=UNICODE")) == NULL) // C4996
    // Note: _wfopen is deprecated; consider using _wfopen_s instead
    {
        wprintf(L"_wfopen failed!\n");
        return(0);
    }

    // Write a string into the file.
    wcscpy_s(str, sizeof(str)/sizeof(wchar_t), L"<xmlTag>\n");
    strSize = wcslen(str);
    if (fwrite(str, sizeof(wchar_t), strSize, fileHandle) != strSize)
    {
        wprintf(L"fwrite failed!\n");
    }

    // Write a string into the file.
    wcscpy_s(str, sizeof(str)/sizeof(wchar_t), L"</xmlTag>");
    strSize = wcslen(str);
    if (fwrite(str, sizeof(wchar_t), strSize, fileHandle) != strSize)
    {
        wprintf(L"fwrite failed!\n");
    }

    // Close the file.
    if (fclose(fileHandle))
    {
        wprintf(L"fclose failed!\n");
    }
    return 0;
}

참고자료See also

스트림 I/OStream I/O
멀티바이트 문자 시퀀스 해석Interpretation of Multibyte-Character Sequences
fclose, _fcloseallfclose, _fcloseall
_fdopen, _wfdopen_fdopen, _wfdopen
ferrorferror
_fileno_fileno
freopen, _wfreopenfreopen, _wfreopen
_open, _wopen_open, _wopen
_setmode_setmode
_sopen, _wsopen_sopen, _wsopen