2010-05-24 4 views
7

ios ::에 존재하지 않는 파일에 fstream을 열 수 있습니까? & ios :: out 오류가 발생하지 않고 있습니까?존재하지 않는 파일에 fstream 들어갔다 밖으로

+5

답변을 수락하거나 답변을 시도했는지 여부를 알려주거나 (답변을 작성할 수 있도록 자세한 내용을 기입하십시오) –

답변

0
#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 
    fstream f("test.txt", fstream::in | fstream::out); 
    cout << f.fail() << endl; 
    f << "hello" << endl; 
    f.close();  
    return 0; 
} 

이 코드는 1를 인쇄하고 그것을 종료하지 않는 경우, "TEST.TXT"파일을 생성하지 않습니다. 따라서 오류가 발생하지 않고 존재하지 않는 파일을 열고 fstream하는 것은 불가능합니다.

+0

"filestr.fail) "및"filestr << "hello"<< endl; "?! – Secko

+0

@Secko 예, 고마워요. –

2
#include <fstream> 

ofstream out("test", ios::out); 
if(!out) 
{ 
    cout << "Error opening file.\n"; 
    return 1; 
} 

ifstream in("test", ios::in); 
if(!in) 
{ 
    cout << "Error opening file.\n"; 
    return 1; 
} 

오류가 발생하면 메시지가 표시되고 하나가 반환됩니다. 그러나 ofstream out("test", ios::out);ifstream in("test", ios::in);을 오류없이 컴파일하고 실행할 수 있습니다. 어느 쪽이든 파일 시험이 생성됩니다.

8

업데이트 : 파일상의 fstream를 열려면 오류를받지 않고 입력 및 출력 (랜덤 액세스) 존재하지 않습니다, 당신은 open (또는 생성자) 호출에 fstream::in | fstream::out | fstream::trunc을 제공해야한다. 파일이 아직 존재하지 않으므로 파일을 0 바이트로 자르는 것은 드라마가 아닙니다. 조기 실패하는 것이 좋습니다 있도록 스트림에서 읽을 수 없을 것이기 때문에 ios::in를 지정할 때 존재하지 않는 파일을 열 때

당신 오류를 원하는 것입니다.

+1

그렇다면 fstream 클래스의 객체를 통해 존재하지 않는 파일을 열면 오류가 발생하지 않는 이유는 무엇입니까? 예 : fstream myfile; myfile.open ("this_file_doesn't_exist.txt"); // 아무런 오류도 발생시키지 않습니다. – Ketcomp

0
std::fstream f("test.txt", std::ios_base::out); 
f.close(); //file now exists always 
f.open("test.txt", fstream::in | std::ios_base::out); 
//f is open for read and write without error 

오류없이 열리라는 것을 보장하기 위해 체크하지 않았지만, 나는 그것이해야한다고 확신합니다.

관련 문제