2013-10-25 72 views
0

我想用這個簡單的程序來的document1.txt內容複製到document2.txt複製一個文件到另一個內容保持其他文件空

int main() { 
    ifstream in("document1.txt"); 
    ofstream out("document2.txt"); 
    string str; 
    while(getline(in,str)) 
     out<<str; 
} 

但是,當我運行程序時,我發現, document2.txt仍然是空的。

什麼可能是錯的?

+0

您是否檢查文件是否實際打開? –

+0

你並沒有明確地關閉流,所以它們不會被刷新/關閉,直到它們超出範圍。這是你的整個程序,還是其他的事情發生之後? – benjymous

+0

@阿里阿拉米里。感謝您的回覆。我在開始時手動創建了它們。這可能是問題嗎? – Simplicity

回答

0
ifstream document1("document1.txt"); 
ofstream document2("document2.txt"); 
string str; 
getline(document1, str); 
document2<< str<< endl; 
document1.close(); 
document2.close(); 

試試看看這個代碼。這個對我有用。

1
ifstream in("document1.txt"); 
    ofstream out("document2.txt"); 
    string str; 
    while(getline(in,str)) 
    { 
     out<<str; 
    } 
    in.close(); // <--- 
    out.close(); // <--- 

有一個函數可以關閉它。請檢查:ifstreamofstream

+0

當任何流對象超出範圍時,它們將被銷燬並關閉流。沒有必要顯式調用'close'。 –

1

「我手動創建document1.txtdocument2.txt

如果你是直接從Visual Studio運行程序,注意工作目錄設置爲$(ProjectDir)默認情況下,即這些文件必須放在與您的項目文件(.vcproj/.vcxproj)相同的目錄。

你既可以置身其中到相應的目錄或指定的完整路徑,例如直接將它們放置到C:,並在代碼中完成:

ifstream in("C:\\document1.txt"); 
ofstream out("C:\\document2.txt"); 

這東西,如果你的情況下,輸出的東西,你會發現,而開放的錯誤:

if (!out.is_open()) 
{ 
    std::cout << "ERROR: Can not open document2.txt" << std::endl; 
    return -1; 
} 

注意,在這種情況下,你實際上並不需要刷新任何緩衝,既沒有明確關閉該流。所有這些都會在這些對象被破壞時自動發生,即當執行超出範圍時。

+0

我已按照您的建議指定了完整路徑,並且我創建的文檔位於同一個項目的文件夾中,但仍然存在相同的問題。有任何想法嗎?謝謝 – Simplicity

+0

@Simplicity:你是否添加了檢查'out.is_open()'的行?它輸出了一個錯誤? – LihO

+0

@Simplicity:也不要明確創建輸出文件。讓你的程序創建它。 – LihO

0

TEST.CPP

#include <iostream> 
#include <fstream> 
using namespace std; 
int main() { 
    ifstream in("document1.txt"); 
    ofstream out("document2.txt"); 
    string str; 
    while(getline(in,str)) 
     out<<str<<endl; 
} 

document1.txt

aaaaaaaa 
bbb bbb 
c c c c 
d 

下命令行,你可以做

$g++ test.cpp -o test.out 
$test.out 

,然後你會得到document2.txt

aaaaaaaa 
bbb bbb 
c c c c 
d 



P.S.在Mac和Linux下測試的所有代碼
P.S.如果將第9行test.cpp從out<<str<<endl;更改爲out<<str;
document2。TXT會變得

aaaaaaaabbb bbbc c c cd 

因爲getline(in,str)函數將提取從in字符,並將它們存儲到str直到「\ n」或結束文件被發現。
這意味着str不包含'\ n'。你需要自己添加'\ n'。
P.S.下C++,如LihO說,你並不需要關閉inout,因爲inout將在第10行}
此外,當您執行第9行,你不需要衝洗被關閉,因爲endl有清洗功能。

相關問題