Файловые потоки не открываются

У меня есть следующий код C++ как часть более крупной программы:

/* Open the output streams */
    std::ofstream outputFile;
    outputFile.open(outputName);
    std::ofstream outputFile1;
    outputFile1.open(outputName1);
    std::ofstream outputFile2;
    outputFile2.open(outputName2);

    std::cout <<  outputFile.is_open() << " " << outputFile1.is_open() << " " << outputFile2.is_open() << std::endl;
if (inputFile.is_open() && outputFile.is_open() && outputFile1.is_open() && 

outputFile2.is_open())
...

Предполагается открыть несколько потоков выходных файлов, которые затем, если они все открыты, будут выполнять серию операций, записывающих в каждый из них. Однако программа завершается раньше, потому что потоки никогда не открываются:

0 0 0
Filestream or output streams could not open, ending program!

Переменные outputName — это std::strings, которые, как я думал, разрешены в С++ 11 (у меня включен флаг -std для С++ 11 в моих параметрах компилятора OpenBlocks).

Я не уверен, почему потоки не открываются.

Спасибо.


person Ward9250    schedule 20.08.2014    source источник
comment
Вы проверили имена файлов?   -  person MartinStettner    schedule 20.08.2014
comment
Откуда мы должны знать, почему вы не можете получить доступ к этим файлам?!   -  person Lightness Races in Orbit    schedule 20.08.2014
comment
Переменные outputName — это std::strings, которые, как я думал, разрешены в C++11 Так и есть, и если бы это было проблемой, вы бы увидели ошибку компиляции.   -  person Lightness Races in Orbit    schedule 20.08.2014
comment
Извиняюсь, я должен добавить - выходные файлы еще не существуют - я ожидаю, что программа создаст их, а затем запишет в них, у меня сложилось впечатление, что имя, используемое для открытия ofstream, не соответствует уже существующему файлу, будет создан файл с таким именем. Я использую простое имя testout1.txt, testout2.txt и testout3.txt. Я (возможно, неправильно) предполагаю, что эти файлы будут созданы в текущем каталоге, в котором я запустил исполняемый файл.   -  person Ward9250    schedule 20.08.2014
comment
Только что использовал 'if( !outputFile ) { std::cout ‹‹ strerror(errno) ‹‹ '\n'; }' в моем коде с библиотекой cerrno и говорит: Нет такого файла или каталога!   -  person Ward9250    schedule 20.08.2014


Ответы (1)


Файловые потоки могут не открыться по ряду причин, например, если путь недействителен, если доступ запрещен или если файл уже открыт для записи в другой программе.

Эти ошибки зависят от ОС, поэтому нет стандартного способа сообщить, какая из них произошла. Однако вы можете получить код ошибки с ответами на этот вопрос.

Если вы используете Windows, будьте осторожны; если сообщает код ошибки 5 (отказано в доступе) по всевозможным причинам, которые не имеют ничего общего с разрешениями.

person IanPudney    schedule 20.08.2014