Файловите потоци не се отварят

Имам следния 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, които смятах, че са разрешени в C++11 (имам активиран флаг -std за C++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, не съответства на вече съществуващ файл, a ще бъде създаден файл с това име. Името, което използвам, е просто 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, бъдете внимателни; if съобщава код за грешка 5 (достъпът е отказан) поради всякакви причини, които нямат нищо общо с разрешенията.

person IanPudney    schedule 20.08.2014