fopen_s, _wfopen_s

파일을 엽니다.이러한 버전의 위해 fopen, _wfopen 에 설명 된 대로 보안을 강화 하 고 있는 CRT의 보안 기능.

errno_t fopen_s( 
   FILE** pFile,
   const char *filename,
   const char *mode 
);
errno_t _wfopen_s(
   FILE** pFile,
   const wchar_t *filename,
   const wchar_t *mode 
);

매개 변수

  • [out] pFile
    파일 포인터가 열려 있는 파일에 대 한 포인터를 받을 포인터입니다.

  • [in] filename
    파일 이름입니다.

  • [in] mode
    허용 되는 액세스 유형입니다.

반환 값

성공 하는 경우에 0입니다. 실패 시 오류 코드입니다.볼 errno, _doserrno, _sys_errlist, _sys_nerr 이러한 오류 코드에 대 한 자세한 내용은.

오류 조건

pFile

filename

mode

반환 값

내용pFile

NULL

any

any

EINVAL

변경 하지 않고

any

NULL

any

EINVAL

변경 하지 않고

any

any

NULL

EINVAL

변경 하지 않고

설명

열려 있는 파일 fopen_s 및 _wfopen_s 공유할 수는 없습니다.파일 공유할 수 있어야 하는 경우 사용 _fsopen, _wfsopen 적절 한 공유 모드 상수-예를 들어, _SH_DENYNO 읽기/쓰기 공유 합니다.

fopen_s 함수는 지정 된 파일을 연다 filename._wfopen_s와이드 문자 버전인 fopen_s. 인수를 _wfopen_s 와이드 문자 문자열입니다._wfopen_s및 fopen_s 그렇지를 동일 하 게 동작 합니다.

fopen_s실행 시점에서 파일 시스템에 잘못 된 경로 받아들입니다. 매핑된 네트워크 드라이브를 포함 하는 경로 및 UNC 경로에서 수락 fopen_s 코드가 실행 되는 시스템의 공유에 액세스할 수 있거나 실행 시 매핑된 네트워크 드라이브 하기만 합니다.에 대 한 경로 생성할 때 fopen_s, 드라이브, 경로, 사용 가능성에 대 한 가정을 하지 마십시오 또는 네트워크 공유에서 실행 환경입니다.경로가 디렉터리 구분 기호로 슬래시 (/) 또는 백슬래시 (\)를 사용할 수 있습니다.

이러한 함수 매개 변수의 유효성을 검사 합니다.경우 pFile, filename, 또는 mode 는 null 포인터에 설명 된 대로 잘못 된 매개 변수가 예외, 이러한 함수를 생성 매개 변수 유효성 검사.

항상 모든 파일 추가 작업을 수행 하기 전에 함수 성공 여부를 확인할 수 있는 반환 값을 확인 합니다.오류가 발생 하면 오류 코드가 반환 되 고 전역 변수 errno 설정 됩니다.자세한 내용은 errno, _doserrno, _sys_errlist, _sys_nerr을 참조하십시오.

유니코드 지원

fopen_s유니코드 파일 스트림을 지원합니다.기존 또는 새 유니코드 파일을 열려면 전달 된 ccs 에 원하는 인코딩을 지정 하는 플래그 fopen_s:

fopen_s(&fp, "newfile.txt", "rw, ccs=encoding");

Allowed values of encoding are UNICODE, UTF-8, and UTF-16LE.없음 값이 지정 되어 있을 경우 encoding, fopen_s ANSI 인코딩을 사용 합니다.

파일이 이미 존재 하 고 읽거나 추가 열릴 경우 바이트 순서 표시 (BOM), 파일에 있는 경우에 인코딩을 결정 합니다.BOM 인코딩을 지정 된 인코딩을 통해 우선은 ccs 플래그입니다.ccs 인코딩 현재 또는 새 파일 파일인 경우 BOM 있을 때만 사용 됩니다.

[!참고]

BOM 검색 유니코드 모드로 열려 있는 파일에만 적용 됩니다. 즉, 전달한는 ccs 플래그입니다.

다음 표에서 모드에 대 한 다양 한 요약 ccs 플래그를 주어 지 fopen_s 파일에서 바이트 순서 표시 하 고 있습니다.

플래그 및 BOM을 사용할 인코딩 기반 ccs

ccs 플래그

BOM (없거나 새 파일)

BOM: U T F-8

BOM: U T F-16

UNICODE

UTF-16LE

UTF-8

UTF-16LE

UTF-8

UTF-8

UTF-8

UTF-16LE

UTF-16LE

UTF-16LE

UTF-8

UTF-16LE

BOM을 자동으로 기록할 유니코드 모드로 작성을 위한 열려 있는 파일을가지고 있습니다.

경우 mode 는 "a, ccs=<encoding>", fopen_s 먼저 읽기 액세스와 쓰기 액세스 파일을 열려고 시도 합니다.성공 하면 BOM 파일의 인코딩을 결정 하는 함수를 읽습니다. 실패 한 함수 파일에 대 한 기본 인코딩을 사용 합니다.두 경우 모두에서 fopen_s 쓰기 전용 액세스 권한 사용 하 여 파일을 다시 엽니다.(이 적용 됩니다 a 모드 전용, not a+.)

일반 텍스트 루틴 매핑

TCHAR입니다.H 루틴

_UNICODE 및 _Mbcs가 정의 되어 있지 않습니다

_Mbcs가 정의

_Unicode가 정의

_tfopen_s

fopen_s

fopen_s

_wfopen_s

문자열 mode 파일의 경우 다음과 같은 방법으로 요청 되는 액세스 종류를 지정 합니다.

  • "r"
    읽기 위해 엽니다.파일이 존재 하지 않거나 찾을 수 없는 경우는 fopen_s 호출이 실패 합니다.

  • "w"
    쓰기에 대 한 빈 파일을 엽니다.파일이 있으면 해당 내용이 삭제 됩니다.

  • "a"
    (파일에 새 데이터를 쓰기 전에 EOF 표식을 제거 하지 않고 추가) 파일의 끝 쓰기 위해 열립니다.파일이 없으면 파일을 만듭니다.

  • "r+"
    읽기와 쓰기에 대 한 열립니다.(파일이 있어야 합니다.)

  • "w+"
    읽기와 쓰기에 대 한 빈 파일을 엽니다.파일이 있으면 해당 내용이 삭제 됩니다.

  • "a+"
    읽고 추가 엽니다.추가 작업에 새 데이터가 파일에 기록 되 고 EOF 표식 작성이 완료 된 후 복원 전에 EOF 표식 제거 포함 됩니다.파일이 없으면 파일을 만듭니다.

사용 하 여 파일을 열었을 때의 "a" 또는 "a+" 액세스 형식, 모든 쓰기 작업은 파일 끝에 발생할.파일 포인터를 사용 하 여 위치가 변경 될 수 fseek 또는 rewind을 하면서 모든 작업이 이루어지므로 기존 데이터를 덮어쓸 수 있도록 쓰기 전에 항상 다시 파일의 끝으로 이동 합니다.

"a" 모드 제거 하지 않습니다 EOF 표식 파일에 추가 하기 전에.추가 발생 한 후 MS-DOS TYPE 명령을 원래 EOF 표식 최대 데이터 및 파일에 추가 된 모든 데이터를 보여 줍니다."a+" 모드를 파일에 추가 하기 전에 EOF 표식을 제거 하지.추가한 후 파일의 모든 데이터 MS-DOS TYPE 명령을 보여 줍니다."a+" 모드 CTRL + Z EOF 표식을 사용 하 여 종료 되는 스트림 파일에 추가 위해서 필요 합니다.

경우는 "r+","w+", 또는 "a+" 액세스 유형을 지정한 경우에 읽기와 쓰기를 허용 합니다. (파일 열기 "업데이트" 라고 합니다.) 그러나 읽고 쓰기를 전환할 때 입력된 작업 EOF 표식에 발생 해야 합니다.EOF 없는 경우는 중간에 다른 함수를 호출할 때 파일 위치를 사용 해야 합니다.파일 위치 지정 함수는 fsetpos, fseek, 및 rewind.읽는 중에 쓰기를 전환할 때 호출에 지장을 주지를 사용 해야 fflush 또는 파일 위치를 지정 하는 함수입니다.

위의 값 외에 다음 문자가 포함 될 수 있습니다 mode 줄 바꿈 문자에 대 한 변환 모드를 지정 합니다.

  • t
    열기 텍스트에서 (번역) 모드입니다.이 모드에서 CTRL + Z는 파일 끝 문자로 입력 해석 됩니다.읽기/쓰기에 대 한 열린 파일에서 "a+", fopen_s 파일의 끝에 CTRL + Z에 대 한 확인 하 고 가능 하면 제거 합니다.이 사용 하 여 수행 됩니다 fseek 및 ftell CTRL + Z로 인해 내에서 파일을 이동 하려면 fseek 파일 끝부분을 제대로 동작 합니다.

또한 텍스트 모드 캐리지 – 줄 바꿈 조합을 단일 줄 바꿈에 입력을 번역 하 고 줄 바꿈 문자 출력 – 줄 바꿈 조합을 캐리지에 변환 됩니다.때 텍스트 모드 (기본값), 원본 유니코드 스트림-I/O 함수 작동 또는 대상 스트림 멀티 바이트 문자 시퀀스로 간주 됩니다.따라서 유니코드 스트림 입력 함수 멀티 바이트 문자를 와이드 문자로 변환 (호출 하는 경우로 mbtowc 함수).같은 이유로, 유니코드 스트림 출력 함수의 와이드 문자 멀티 바이트 문자로 변환 (호출 하는 경우로 wctomb 함수).

  • b
    이진 (변환 되지 않은) 모드에서 열기 캐리지 리턴 및 줄 바꿈 문자를 포함 하는 번역에 표시 되지 않습니다.

경우 t 또는 b 주어 지지 않았기 mode, 기본 변환 모드는 전역 변수로 정의 된 _fmode.경우 t 또는 b 인수, 함수 실패 및 반환에 접두사가 NULL.

텍스트 및 유니코드와 멀티 바이트 스트림-I/O를 이진 모드를 사용 하는 방법에 대 한 자세한 내용은 텍스트 및 이진 모드 파일 I/O유니코드 스트림 I/O 텍스트 및 이진 모드에서.

  • c
    연결 된 커밋 플래그 사용 filename 파일 버퍼의 내용을 직접 경우 디스크에 기록 되도록 fflush 또는 _flushall 라고 합니다.

  • n
    연결 된 커밋 깃발 filename "아니요 커밋"을 이 값이 기본값입니다.COMMODE.OBJ 사용 하 여 프로그램을 연결 하는 경우 또한 글로벌 커밋 플래그를 재정의 합니다.COMMODE 사용 하 여 프로그램을 명시적으로 연결 하지 않으면 글로벌 커밋 플래그 기본값은 "no 커밋"입니다.OBJ (see 연결 옵션).

  • N
    파일을 자식 프로세스에 상속 된다는 것을 지정 합니다.

  • S
    캐싱, 최적화 이지만 순차적 액세스 하려면 디스크에서 제하지 없는 것을 지정 합니다.

  • R
    캐싱, 최적화 이지만 임의 액세스 하려면 디스크에서 제하지 없는 것을 지정 합니다.

  • T
    파일을 임시 이름으로 지정합니다.않습니다 플러시 가능한 경우 디스크.

  • D
    파일을 임시 이름으로 지정합니다.마지막으로 파일 포인터를 닫을 때 삭제 됩니다.

  • ccs=ENCODING
    이 파일에 대 한 (utf-8, u t F-16le와 유니코드)을 사용 하는 코딩 된 문자 집합을 지정 합니다.그대로이 ANSI 인코딩을 원하는 경우 지정 되지 않았습니다.

유효한 문자에 대 한의 mode 문자열에 사용 되는 fopen_s 및 _fdopen 해당 oflag 인수에 사용 되는 _open_sopen와 같이.

문자 모드 문자열

해당 하는 oflag 값 _open/_sopen

a

_O_WRONLY | _O_APPEND(usually _O_WRONLY | _O_CREAT |_O_APPEND)

a+

_O_RDWR | _O_APPEND(usually _O_RDWR | _O_APPEND | _O_CREAT )

r

_O_RDONLY

r+

_O_RDWR

w

_O_WRONLY(usually _O_WRONLY |_O_CREAT | _O_TRUNC)

w+

_O_RDWR(usually _O_RDWR | _O_CREAT | _O_TRUNC)

b

_O_BINARY

t

_O_TEXT

c

없음

n

없음

S

_O_SEQUENTIAL

R

_O_RANDOM

T

_O_SHORTLIVED

D

_O_TEMPORARY

ccs=UNICODE

_O_WTEXT

ccs=UTF-8

_O_UTF8

ccs=UTF-16LE

_O_UTF16

사용 하는 경우 rb 모드에서 코드를 이식 하 고 많은 수의 파일을 읽이 필요가 없습니다 및/또는 네트워크 성능에 대 한 신경, 메모리 매핑 Win32 파일 옵션이 될 수도 있습니다.

요구 사항

Function

필수 헤더

fopen_s

<stdio.h>

_wfopen_s

<stdio.h> 또는 <wchar.h>

추가 호환성 정보를 참조 하십시오. 호환성 소개에서 합니다.

라이브러리

모든 버전의 C 런타임 라이브러리.

c, n, 및 tmode 옵션은 Microsoft 확장을 fopen_s 및 _fdopen 및 ANSI 휴대성을 원하는 위치를 사용할 수 없습니다.

예제

// crt_fopen_s.c
// 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 )
{
   errno_t err;

   // Open for read (will fail if file "crt_fopen_s.c" does not exist)
   err  = fopen_s( &stream, "crt_fopen_s.c", "r" );
   if( err == 0 )
   {
      printf( "The file 'crt_fopen_s.c' was opened\n" );
   }
   else
   {
      printf( "The file 'crt_fopen_s.c' was not opened\n" );
   }

   // Open for write 
   err = fopen_s( &stream2, "data2", "w+" );
   if( err == 0 )
   {
      printf( "The file 'data2' was opened\n" );
   }
   else
   {
      printf( "The file 'data2' was not opened\n" );
   }

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

   // All other files are closed:
   int numclosed = _fcloseall( );
   printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}
  

해당 .NET Framework 항목

참고 항목

참조

스트림 I/O

fclose, _fcloseall

_fdopen, _wfdopen

ferror

_fileno

freopen, _wfreopen

_open, _wopen

_setmode