2016-09-25 108 views
0

我想在循環內創建多個文件並在其中寫入內容。我做了以下代碼。但它只創建一個名爲'1'而不是五個文件(從1到5)的文件:一次寫入多個文件

#include <fstream> 
#include<iostream> 
using namespace std; 
int main(){ 
    FILE *fp; 
    ofstream os; 
    char i; 
    char fileName[] = "0.txt"; 
    for(i='1';i<='5';i++) 
    { 
    fileName[0]=i; 
    . 
    os.open (fileName); 
    os<<"Hello"<<"\n"; 
    } 
} 

代碼中是否有任何錯誤?我將如何獲得這五個文件?

+0

是否合法改變這個字符串' 「0.txt」'?你可以編輯問題來刪除點嗎? –

+0

@ Jean-FrançoisFabre它是非''const''char'數組,它是合法的。 – xinaiz

+0

@ Jean-FrançoisFabre是的,因爲它被複制到一個char數組中。 –

回答

2

std::ofstream::open參考具體規定:

打開文件打開由參數文件名標識的文件,它與該流對象關聯 ,使得輸入/輸出操作是在它的內容上執行 。參數模式指定打開模式。

如果該流已經與一個文件關聯(即已經打開了 ),則調用該函數失敗。

你永遠不會在你的循環中關閉你正在使用的文件,所以open第二次失敗。

添加:

for(i='1';i<='5';i++) 
    { 
    fileName[0]=i; 
    os.open (fileName); 
    os<<"Hello"<<"\n"; 
    os.close(); 
    } 

此外,你應該檢查是否open()成功:

for(i='1';i<='5';i++) 
    { 
    fileName[0]=i; 
    os.open (fileName); 
    if(os) // checks if open() succeeeded 
    { 
     os<<"Hello"<<"\n"; 
     os.close(); 
    } 
    } 
+0

應該總是檢查'os.open'的返回狀態。在循環中聲明'ofstream os;'也是這樣(在這種情況下不需要'close') –

+0

@ Jean-FrançoisFabre沒有特別關注這個問題,但是。 –

0
#include <fstream> 
#include <iostream> 

using namespace std; 

int main() { 
    ofstream os; 
    char fileName[] = "0.txt"; 
    for(int i = '1'; i <= '5'; i++) 
    { 
    fileName[0] = i; 
    os.open(fileName); 
    os << "Hello" << "\n"; 
    os.close(); 
    } 
} 
+0

呵呵,一分鐘內打類似的解決方案= D – agg3l

+0

一個工作方案就夠了。那麼,評論足夠了...... –

相關問題