2012-07-14 137 views
4

使用不同的流可以同時打開兩個文件嗎?我正在嘗試寫入兩個流,其中一個變量文件名在循環迭代時發生變化,另一個文件名具有固定文件名,我寫入的數據將在循環的每次迭代中追加。爲了證明:使用C++的文件I/O同時打開兩個文件

ofstream file_variable_name; 
ofstream file_to_be_appended; 

{ //THIS IS A LOOP, variable_name changes at every iteration 

file_variable_name.open(variable_name.c_str(), ios::out); 
file_to_be_appended.open("fixed name", ios::out | ios::app); 

//Do lots of things here, make data ready to be written to file 

file_variable_name << "write something" << endl; 
file_to_be_appended << "write same as above, but this is to be appended" << endl; 

file_variable_name.close(); 
file_to_be_appended.close(); 
} 

不知怎的,我甚至不能設法得到要創建更別說開和追加第二個文件。我可以發送完整的代碼(大約有1000行左右,需要被截斷),但是我認爲上述內容會解釋我正在嘗試做的事情,任何邏輯缺陷都會對專業人員顯而易見。

在此先感謝您的所有建議!

+4

?爲什麼不在循環之外打開它並使用它? – ForEveR 2012-07-14 01:20:56

+0

沒有什麼能夠防止同時打開兩個文件(只要它們是不同的文件)。必須是其他事情。 – 2012-07-14 01:29:50

+2

如果您可以將您的原始程序縮小爲** short **,** complete **樣本程序,並且如果您可以將該程序完整粘貼到您的問題中,這將有所幫助。請參閱http://sscce.org/。瞭解更多信息。 – 2012-07-14 01:35:16

回答

3

你讓它變得更難。一般沒有必要使用。開()和.close()方法,而你並不需要保存重新打開相同的文件:爲什麼你嘗試在環路斷開file_to_be_appended

#include <fstream> 

int main(int argc, char *argv[]) 
{ 
    std::ofstream file_to_be_appended("fixed name"); 

    char const *list[] = {"a", "b", "c"}; 
    for (auto s : list) { // My compiler doesn't have generalized initializer lists yet 
     std::ofstream file_variable_name(s); 

     file_variable_name << "write something\n"; 
     file_to_be_appended << "write same as above, but this is to be appended\n"; 
    } 
} 
1

我會變成你貼成一個簡單的程序代碼:

#include <iostream> 
#include <fstream> 

int main() { 
    ofstream file_variable_name; 
    ofstream file_to_be_appended; 

    file_variable_name.open("variable_name.txt", ios::out); 
    file_to_be_appended.open("fixed_name.txt", ios::out | ios::app); 

    file_variable_name << "write something" << endl; 
    file_to_be_appended << "write same as above, but this is to be appended" << endl; 

    file_variable_name.close(); 
    file_to_be_appended.close(); 

    return 0; 
} 

現在它添加一個循環用一些虛擬的文件名。如果您在此過程中遇到任何問題,此代碼很簡單,可以幫助縮小問題的範圍。