c ++ fileIO创建/打开文件不起作用

时间:2012-02-01 02:16:52

标签: c++ windows file-io

我正在开发一个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会生成一个文件,但是它也不能生成文件夹,或者我是否需要一个不同的命令来生成文件存在的文件夹。当我得到摆脱代码中的子目录它工作正常,如果我创建文件夹,我可以把子目录代码。.. / / p>

注意:我理解我应该在技术上打开文件缓冲区,与创建流对象的行相同。我没有,因为我打算将.open放入一个案例开关(_thing)来访问多个文件,只需更改流。

3 个答案:

答案 0 :(得分:2)

std :: ofstream无法创建目录,标准C ++也没有支持这样做。您可以使用boost.Filesystem:create_directories,或者在POSIX系统上使用POSIX函数mkdir()。您可以在this StackOverflow question了解更多解决方案。

答案 1 :(得分:1)

您可以在调用open之前使用_mkdir函数。

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

答案 2 :(得分:0)

在Windows上使用CreateDirectory调用来创建文件夹。