2009-12-03 45 views
3
#include <iostream> 
#include <fstream> 
#include <cstdlib> 

int main() { 
    std::fstream f1("/tmp/test"); 
    if (!f1) { 
     std::cerr << "f1 failed\n"; 
    } else { 
     std::cerr << "f1 success\n"; 
    } 
    FILE *f2 = fopen("/tmp/test", "w+"); 
    if (!f2) { 
     std::cerr << "f2 failed\n"; 
    } else { 
     std::cerr << "f2 success\n"; 
    } 
} 

在/ tmp /中创建一个文件不适用于我使用fstreams,但它与fopen一起工作。可能是什么问题呢? (我得到F1失败,当/ tmp/test目录不存在F2成功)如何在C++中的其他目录中创建文件?

+0

使用使用tmpnam,TMPFILE,或临时文件类似。 – 2009-12-03 22:28:57

回答

4

你必须告诉您正在打开输出文件的fstream的,像这样的

​​

或者改用ofstream的fstream的的,在默认情况下打开输出文件:

std::ofstream fs("/tmp/test"); 
+1

http://www.cplusplus.com/reference/iostream/fstream/fstream/表示fstream的默认构造函数已经设置了ios_base :: out,那么它为什么不像最初编写的那样工作呢? – Steven 2009-12-03 22:30:43

+0

我想简单的fstream失败了,因为它也添加了ios :: in,并且打开输入文件时必须存在。 – Thomas 2009-12-03 22:37:32

+0

因为如果文件不存在,in | out'不会创建该文件。 openmode的'in | out | trunc','out | trunc','out | app'和'out'值将创建它。 – 2009-12-03 22:38:45

0

你的第一个方法调用不会自动创建一个文件:见fstream

如果你希望你的第一个方法调用创建一个文件,使用方法:

std::fstream f1("/tmp/test", fstream::out); 
0

我不知道这对于fstream的构造函数的默认模式,我想这个和它的工作

std::fstream f1("/tmp/test", std::fstream::in | std::fstream::out); 

它可以为输入和输出文件,你应该检查fstream的文件here

相关问题