2009-12-03 41 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

相關問題