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.

modemode
사용할 수 있는 액세스 종류입니다.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. 파일 이름 또는 모드가 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 및 _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. 기본적으로 좁은 파일 이름 문자열은 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 함수를 사용 하 여 ANSI 또는 시스템 기본 OEM 코드 페이지를 사용 하 여 파일 이름을 해석할지 여부를 결정할 수 있습니다.You can use the AreFileApisANSI function to determine whether filename is interpreted using the ANSI or the system default OEM codepage. _wfopenfopen 의 와이드 문자 버전입니다. _wfopen 인수는 와이드 문자 문자열입니다._wfopen is a wide-character version of fopen; the arguments to _wfopen are wide-character strings. 그렇지 않으면 _wfopenfopen 이 동일 하 게 작동 합니다.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 및 _sys_nerr를 참조하세요.For more information, see errno, _doserrno, _sys_errlist, and _sys_nerr.

기본적으로이 함수의 전역 상태는 응용 프로그램으로 범위가 지정 됩니다.By default, this function's global state is scoped to the application. 이를 변경 하려면 CRT의 전역 상태를 참조 하세요.To change this, see Global state in the CRT.

유니코드 지원Unicode Support

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

FILE * fp = fopen ("newfile.txt", "rt +, ccs =encoding");FILE *fp = fopen("newfile.txt", "rt+, ccs=encoding");

Encoding 의 허용 되는 값은 UNICODE, utf-8u t f-utf-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).

다음 표에는 파일의 fopen 및 바이트 순서 표시에 제공 되는 다양 한 ccs 플래그에 사용 되는 모드가 요약 되어 있습니다.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
UNICODEUNICODE UTF-16LEUTF-16LE UTF-8UTF-8 UTF-16LEUTF-16LE
UTF-8UTF-8 UTF-8UTF-8 UTF-8UTF-8 UTF-16LEUTF-16LE
UTF-16LEUTF-16LE UTF-16LEUTF-16LE UTF-8UTF-8 UTF-16LEUTF-16LE

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

Mode"a, ccs =encoding" 이면 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.

modemode AccessAccess
&"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" 새 데이터를 파일에 쓰기 전에 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 또는 되감기를 사용 하 여 파일 포인터의 위치를 변경할 수 있지만 쓰기 작업을 수행 하기 전에 항상 파일 끝으로 다시 이동 합니다.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되감기입니다.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 line feed 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. 이 작업은 fseekfseek 를 사용 하 여 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-line feed combinations are translated into single line feeds on input, and line feed characters are translated to carriage return-line feed 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
xx Filename 이 이미 있는 경우 함수를 강제로 실행 하지 않습니다.Forces the function to fail if filename already exists. 는 "w" 또는 "w +" 지정자와만 사용할 수 있습니다.Can only be used with the "w" or "w+" specifiers.
cc 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 관련 파일 이름 에 대 한 커밋 플래그를 "커밋 안 함"으로 다시 설정 합니다.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 이 파일에 사용할 인코딩된 문자 집합 ( utf-8, utf-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 에 사용 되는 모드 문자열의 유효한 문자는 다음과 같이 _open_sopen에서 사용 되는 oflag 인수에 해당 합니다.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 Open/sopen에 대 한 해당 oflag 값 _ _Equivalent oflag value for _open/_sopen
a _ O _ WRONLY | _ o _ append (일반적으로 _ o _ WRONLY | _ o _ 만들기 | _ o _ 추가)_O_WRONLY | _O_APPEND (usually _O_WRONLY | _O_CREAT | _O_APPEND)
a +a+ _ O _ rdwr | _ o _ append (일반적으로 _ o _ rdwr | _ o _ 추가 | _ o _ )_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 _ | o _ _ TRUNC)_O_WRONLY (usually _O_WRONLY | _O_CREAT | _O_TRUNC)
w +w+ _ O _ rdwr (일반적으로 _ o _ rdwr | _ o _ | o _ _ TRUNC)_O_RDWR (usually _O_RDWR | _O_CREAT | _O_TRUNC)
bb _O _ 이진_O_BINARY
tt _O _ 텍스트_O_TEXT
xx _O _ EXCL_O_EXCL
cc 없음None
nn 없음None
SS _O _ 순차_O_SEQUENTIAL
RR _O _ 임의_O_RANDOM
TT _O _ SHORTLIVED_O_SHORTLIVED
DD _O _ 임시_O_TEMPORARY
ccs = 유니코드ccs=UNICODE _O _ WTEXT_O_WTEXT
ccs = UTF-8ccs=UTF-8 _O _ UTF8_O_UTF8
ccs = UTF-UTF-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>
_wfopen_wfopen <stdio.h> 또는 <wchar.h><stdio.h> or <wchar.h>

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

C, n, t, S, R, tD 모드 옵션은 fopen_fdopen 에 대 한 Microsoft 확장 이며 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
Multibyte-Character 시퀀스의 해석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