2010-05-24 3 views
7

Возможно ли открыть файл fstream для файла, который не существует с ios :: in & 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», если он не выходит. Таким образом, невозможно открыть и запустить файл, который не существует, без получения ошибки.

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

При возникновении ошибки отображается сообщение и возвращается один (1). Однако можно скомпилировать и выполнить только ofstream out("test", ios::out); и ifstream in("test", ios::in); без каких-либо ошибок. В любом случае создается файл test.

8

Update: Чтобы открыть fstream на файл, который не существует для ввода и вывода (произвольного доступа), не получая ошибки, вы должны предоставить fstream::in | fstream::out | fstream::trunc в (или конструктор) вызова open. Поскольку файл еще не существует, обрезание файла с нулевыми байтами не является драмой.

Вы бы хочу ошибку при открытии файла, который не существует при указании только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 

Я не проверял, чтобы он открылся без ошибок, но я уверен, что он должен.

Смежные вопросы