2015-11-19 91 views
0

所以我想通過文字來複制一個字從文件1到file2,但我的代碼在打開文件2(輸出文件)C++的ofstream無法讀取一個.txt

void myFile::printWords(string inFile, string outFile) 
{ 
ifstream file; 
ofstream file2; 
file.open(inFile); 
file2.open(outFile); 
if (!file.is_open() && !file2.is_open()){ 
    string word; 
    while (!file.eof()){ 
     file >> word; 
     file2 << word << '\n'; 
    } 
} 
else{ 
    cout << "error" << endl; 
} 
file.close(); 
file2.close(); 
} 

任何想法,爲什麼失敗?

+0

我認爲你的代碼是一個問題:檢查兩個文件被打開沒有正確實施 – lowtech

+0

哦天哪,我複製了另一個函數的檢查,並忘記刪除(!)...謝謝 – XEvans

回答

0

請注意,您只複製的話,如果這兩個文件未能開,不是如果他們兩人成功打開:

if (file.is_open() && file2.is_open()){ 

if (!file.is_open() && !file2.is_open()){ 

將其替換

0
if (!file.is_open() && !file2.is_open()) 

意思是如果file未打開且file2未打開。所以你會嘗試從文件中讀取,如果它們沒有打開,你不執行cout << "error" << endl;

你如果條件應該是

if (file.is_open() && file2.is_open()) 

此外,如果你想一個文件複製到另一個比你可以使用

file2 << file.rdbuf(); 

而是while循環。

+0

我需要Word by另一個有趣的詞「,無論如何 – XEvans

0

if (!file.is_open() && !file2.is_open())

如果文件沒有打開和file2不開放

這個邏輯不會複製文件到file2如果你的測試,看看這兩個文件都打不開。

0

問題1

if (!file.is_open() && !file2.is_open()){ 

它應該是

if (file.is_open() && file2.is_open()){ 

問題2

while (!file.eof()){ 
    file >> word; 
    file2 << word << '\n'; 
} 

這是不對的。它應該是:

while (file >> word){ 
    file2 << word << '\n'; 
} 

要理解爲什麼,請參閱Why is iostream::eof inside a loop condition considered wrong?

0

形式爲!file.is_open()的測試不應該有not運算符,並且可以通過依賴operator bool()成員函數進行更簡化。循環訪問eof()條件也很少正確。

考慮到這兩點,我已經重寫了你的函數,我認爲這樣更簡單更正確。

void myFile::printWords(const string &inFile, const string &outFile) 
{ 
    ifstream file(inFile); 
    ofstream file2(outFile); 
    if (file && file2) { 
     string word; 
     while (file >> word) { 
      file2 << word << '\n'; 
     } 
    } else { 
     cout << "error" << endl; 
    } 
} 

注:數據流會被自動當他們在這個函數的結尾會破壞封閉。