c ++ fileIO создание / открытие файла не работает - PullRequest
0 голосов
/ 01 февраля 2012

Я работаю над проектом Windows VC ++ 2008 и пытаюсь использовать fileIO для размещения содержимого в файлах журналов в подкаталоге.Я делаю следующее:

void MessageQueue::LogOut(thingEnum _thing){
    std::ofstream Output;
    Output.open("Output/MainLog.txt", std::ios::app);

    if (Output.is_open()){
        // writing stuff
    }
    Output.close();
}

Я знаю, что ios :: app сгенерирует файл, но не может ли он также генерировать папки, или мне нужна другая команда для генерациипапка, в которой находятся файлы. Когда я избавляюсь от подкаталога в коде, он работает нормально, и если я создаю папку, я могу поместить код подкаталога обратно.

примечание: IПонимаю, что я должен технически открыть файловый буфер той же строкой, что и объект потока.Я этого не сделал, потому что планирую поместить .open в переключатель регистра (_thing), чтобы иметь доступ к нескольким файлам, и просто изменить поток.

Ответы [ 3 ]

2 голосов
/ 01 февраля 2012

std :: ofstream не может создавать каталоги, и в стандарте C ++ для этого нет никакой поддержки.Вы можете использовать boost.Filesystem: create_directories или в системе POSIX использовать функцию POSIX mkdir () .Вы можете прочитать больше решений на этот вопрос StackOverflow .

1 голос
/ 01 февраля 2012

Вы можете использовать функцию _mkdir перед вызовом open.

http://msdn.microsoft.com/en-us/library/2fkk4dzw(v=vs.90).aspx

#include <direct.h>

void MessageQueue::LogOut(thingEnum _thing){

    if (_mkdir("Output\\") == 0) {
        std::ofstream Output;

        Output.open("Output\\MainLog.txt", std::ios::app);

        if (Output.is_open()){
            // writing stuff
        }
        Output.close();
   }
   else {
        // could not create directory
   }
}
0 голосов
/ 01 февраля 2012

В Windows используйте вызов CreateDirectory для создания папки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...