다음을 통해 공유


통해, _wfopen

파일을 엽니다.보다 안전한 버전의이 함수를 사용할 수 있습니다. see fopen_s, _wfopen_s.

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

매개 변수

  • filename
    파일 이름.

  • mode
    액세스 종류를 사용할 수 있습니다.

반환 값

이러한 각 함수는 열려 있는 파일에는 포인터를 반환합니다.널 포인터 값은 오류를 나타냅니다.경우 filename 또는 mode 입니다 NULL 또는 빈 문자열이 면이 함수에서 설명 하는 잘못 된 매개 변수 처리기 트리거 매개 변수 유효성 검사.이러한 함수는 실행을 계속 하도록 허용 된 경우, 반환 NULL 및 설정 errno 에 EINVAL.

자세한 내용은 errno, _doserrno, _sys_errlist, _sys_nerr을 참조하십시오.

설명

fopen 함수는 지정 된 파일을 연다 filename._wfopen와이드 문자 버전인 fopen. 인수를 _wfopen 와이드 문자 문자열입니다.그렇지 않으면 _wfopen 및 fopen 동일 하 게 동작 합니다.만 사용 하 여 _wfopen 에서 파일 스트림에 사용 되는 코딩 된 문자 집합에는 영향을 주지 않습니다.

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

항상 모든 추가 파일 작업을 수행 하기 전에 포인터가 NULL 인지 여부를 확인 하려면 반환 값을 확인 합니다.오류가 발생 하면 전역 변수 errno 설정 되어 있고 특정 오류 정보를 가져오는 데 사용할 수 있습니다.자세한 내용은 errno, _doserrno, _sys_errlist, _sys_nerr을 참조하십시오.

유니코드 지원

fopen유니코드 파일 스트림을 지원합니다.유니코드 파일을 열려면 전달 된 ccs 에 원하는 인코딩을 지정 하는 플래그 fopen와 같이.

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

Allowed values of encoding are UNICODE, UTF-8, and UTF-16LE.

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

[!참고]

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

다음 표에서 요약에 대한 다양 한 사용 되는 모드 ccs 주어진 플래그 fopen 파일에서 바이트 순서 표시를 하 고.

플래그 및 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 먼저 모두 읽기 및 쓰기 권한으로 파일을 열려고 시도 합니다.이 작업이 성공 하면 함수 BOM 파일의 인코딩을 확인 합니다 읽습니다. 이 작업이 실패 하면 파일에 대한 기본 인코딩 함수를 사용 합니다.두 경우 모두에서 fopen 파일을 쓰기 전용 액세스 다음 다시 열어야 합니다.(이 적용 됩니다 a 모드 뿐 아니라 a+ 모드.)

일반 텍스트 루틴 매핑

TCHAR입니다.H 루틴

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

_Mbcs가 정의

_Unicode가 정의

_tfopen

fopen

fopen

_wfopen

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

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

  • "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에 EOF 문자가 입력으로 해석 됩니다.열려 있는 파일에 대한 읽기/쓰기를 사용 하 여 "a+", fopen 파일의 끝에 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, UTF-16LE, 또는 UNICODE)이 파일.ANSI 인코딩을 원할 경우 지정 되지 않은 상태로 둡니다.

유효한 문자에 대한의 mode 에 사용 되는 문자열 fopen 및 _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

<stdio.h>

_wfopen

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

호환성에 대한 자세한 내용은 호환성.

c, n, t, S, R, T, 및 Dmode 옵션은 Microsoft 확장을 fopen 및 _fdopen 및 ANSI 휴대성을 원하는 위치를 사용할 수 없습니다.

예제

다음 프로그램은 두 파일을 엽니다.사용 하 여 fclose 첫 번째 파일을 닫을 수 및 _fcloseall 의 나머지 모든 파일을 닫습니다.

// 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 );
}
  

다음 프로그램 파일을 만듭니다 (있는 경우 하나를 덮어씁니다), 유니코드 인코딩 된 텍스트 모드에서.두 문자열을 파일에 기록 하 고 파일을 닫습니다.출력 데이터를 [출력] 섹션을 포함 하는 _wfopen_test.xml 라는 이름의 파일입니다.

// 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;
}

해당 .NET Framework 항목

참고 항목

참조

스트림 I/O

멀티 바이트 문자 시퀀스로 해석

fclose, _fcloseall

_fdopen, _wfdopen

ferror

_fileno

freopen, _wfreopen

_open, _wopen

_setmode

_sopen, _wsopen