2013-07-28 66 views
0

我基本上試圖顛倒文本文件的內容。當我運行這個代碼時,沒有任何反應。代碼:讀取和寫入文件在C++中不起作用

getArguments(); 
stringstream ss; 
ss << argument; 
string fileName; 
ss >> fileName; 
fstream fileToReverse(fileName); 
if (fileToReverse.is_open()) { 
    send(sock, "[*] Contents is being written to string ... ", strlen("\n[*] Contents is being written to string ... "), 0); 
    string line; 
    string contentsOfFile; 
    while (getline(fileToReverse, line)) { 
     contentsOfFile.append(line); 
     line = "\0"; 
    } 
    send(sock, "done\n[*] File is being reversed ... ", strlen("done\n[*] File is being reversed ... "), 0); 
    string reversedText(contentsOfFile.length(), ' '); 
    int i; 
    int j; 
    for(i=0,j=contentsOfFile.length()-1;i<contentsOfFile.length();i++,j--) { 
     reversedText[i] = contentsOfFile[j]; 
    } 
    contentsOfFile = "\0"; 
    fileToReverse << reversedText; 
    fileToReverse.close(); 
    send(sock, "done\n", strlen("done\n"), 0); 
} 

fileName是從用戶輸入創建的,我知道該文件存在。它只是不會對文件做任何事情。如果任何人有任何他們想分享的想法,那就太棒了。

UPDATE:

我現在可以寫reversedText的文件,但我怎麼可以刪除所有的文件內容是什麼?

+0

您是否嘗試調試它? –

+0

是的。它看起來像所有的功能正在運行,所有的變量正在創建,並沒有任何警告編譯。 – jamespick

+2

當您嘗試寫入文件時,文件末尾處於錯誤狀態。我懷疑在寫入之前需要'fileToReverse.clear()'。您可能還想要尋找文件的開頭... –

回答

1

在這種特殊情況下,當您讀取所有輸入內容時,文件處於「錯誤狀態」(在狀態中設置eoffail位)。

您需要清除fileToReverse.clear();。您的文件位置也將位於文件末尾,因此您需要使用fileToReverse.seekp(0, ios_base::beg)將位置設置爲開頭。

但是,就像g-makulik一樣,我喜歡有兩個文件,一個用於輸入,另一個用於輸出。節省大量的搞亂。

1

當你需要調試像這樣的東西 - 說:「所有的功能正在運行,所有的變量正在創建,並沒有任何警告編譯」是不是真的調試。

調試 - 這是行不通的。刪除位,直到找到不起作用的位置。就像你說的那樣 - 所有變量都是你期望的。所以...試着看看,例如,你從文件中讀寫的方式是否奏效。只需編寫一個小程序,打開文件就像打開文件一樣,像你一樣從文件中讀取文件,然後寫入......無論如何寫回文件,就像你一樣。看看是否有效。

換句話說,試着找到再現你所看到的最小程序。