std::basic_filebuf<CharT,Traits>:: open
|
basic_filebuf
*
open
(
const
char
*
s,
std::
ios_base
::
openmode
mode
)
;
|
(1) | |
|
basic_filebuf
*
open
(
const
std::
string
&
str,
std::
ios_base
::
openmode
mode
)
;
|
(2) | (C++11부터) |
|
basic_filebuf
*
open
(
const
std::
filesystem
::
path
&
p,
std:: ios_base :: openmode mode ) ; |
(3) | (C++17부터) |
|
basic_filebuf
*
open
(
const
std
::
filesystem
::
path
::
value_type
*
s,
std:: ios_base :: openmode mode ) ; |
(4) | (C++17부터) |
연관된 파일이 이미 열려 있는 경우( is_open ( ) ! = false ), 즉시 null 포인터를 반환합니다.
그렇지 않으면, 주어진 이름의 파일을 엽니다 ( s , p. c_str ( ) (C++17 이후) 또는 str. c_str ( ) , 오버로드에 따라 다름). std::ios_base::openmode 값들은 예를 들어 std:: ios_base :: out | std:: ios_base :: app 와 같이 작성될 수 있습니다.
|
오버로드
(4)
는
|
(since C++17) |
파일은 마치
std::fopen
을 호출하듯 열리며,
두 번째 인자(파일 접근 모드)는
mode
&
~
std::
ios_base
::
ate
의 결과에 따라 결정됩니다.
결과가 표에 표시된 플래그들의 조합이 아닐 경우
open()
은 실패합니다:
| mode & ~ std:: ios_base :: ate |
std::fopen
접근 모드 |
파일이 이미 존재할 경우 동작 | 파일이 존재하지 않을 경우 동작 | |||||
|---|---|---|---|---|---|---|---|---|
| binary | in | out | trunc | app |
noreplace
(C++23 이후) |
|||
| - | + | - | - | - | - | "r" | 시작 부분에서 읽기 | 열기 실패 |
| + | + | - | - | - | - | "rb" | ||
| - | + | + | - | - | - | "r+" | 오류 | |
| + | + | + | - | - | - | "r+b" | ||
| - | - | + | - | - | - | "w" | 내용 삭제 | 새로 생성 |
| - | - | + | + | - | - | |||
| + | - | + | - | - | - | "wb" | ||
| 지원 | 미지원 | 지원 | 지원 | 미지원 | 미지원 | |||
| - | + | + | + | - | - | "w+" | ||
| + | + | + | + | - | - | "w+b" | ||
| - | - | + | - | - | + | "wx" | 파일 열기 실패 | 새로 생성 |
| - | - | + | + | - | + | |||
| + | - | + | - | - | + | "wbx" | ||
| + | - | + | + | - | + | |||
| - | + | + | + | - | + | "w+x" | ||
| + | + | + | + | - | + | "w+bx" | ||
| - | - | + | - | + | - | "a" | 끝에 쓰기 | 새로 생성 |
| - | - | - | - | + | - | |||
| + | - | + | - | + | - | "ab" | ||
| 지원 | 미지원 | 미지원 | 미지원 | 지원 | 미지원 | |||
| - | + | + | - | + | - | "a+" | ||
| - | + | - | - | + | - | |||
| + | + | + | - | + | - | "a+b" | ||
| + | + | - | - | + | - | |||
열기 작업이 성공하고
(
openmode
&
std::
ios_base
::
ate
)
!
=
0
(
ate
비트가 설정된 경우), 파일 위치를 파일 끝으로 재배치합니다. 이는 마치
std::
fseek
(
file,
0
,
SEEK_END
)
를 호출한 것과 같으며, 여기서
file
은
std::fopen
을 호출하여 반환된 포인터입니다. 재배치가 실패하면
close()
를 호출하고 실패를 나타내기 위해 null 포인터를 반환합니다.
목차 |
매개변수
| s, str, p | - | 열 파일의 이름; s 는 null 종료 문자열을 가리켜야 함 |
| openmode | - | 파일 열기 모드, std::ios_base::openmode 모드들의 비트 OR 연산 |
반환값
this 성공 시, 실패 시 널 포인터를 반환합니다.
참고 사항
open()
는 일반적으로 생성자나
open()
멤버 함수를 통해
std::basic_fstream
에서 호출됩니다.
예제
#include <fstream> #include <iostream> int main() { std::string filename = "Test.b"; std::filebuf fb; // 읽을 파일 준비 double d = 3.14; if (!fb.open(filename, std::ios::binary | std::ios::out)) { std::cout << "파일 열기 실패 (쓰기): " << filename << "\n"; return 1; } fb.sputn(reinterpret_cast<char*>(&d), sizeof d); fb.close(); // 읽기 위해 파일 열기 double d2 = 0.0; if (!fb.open(filename, std::ios::binary | std::ios::in)) { std::cout << "파일 열기 실패 (읽기): " << filename << "\n"; return 1; } auto got = fb.sgetn(reinterpret_cast<char*>(&d2), sizeof d2); if (sizeof(d2) != got) std::cout << "파일 읽기 실패: " << filename << "\n"; else std::cout << "파일에서 읽어온 값: " << d2 << '\n'; }
출력:
파일에서 읽어온 값: 3.14
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 596 | C++98 |
open()
가 추가 모드로 파일을 열 수 없었음
|
추가 모드로 열 수 있음 |
참고 항목
|
연결된 파일이 열려 있는지 확인
(public member function) |
|
|
put 영역 버퍼를 비우고 연결된 파일을 닫음
(public member function) |