2014-12-06 79 views
0

我正在嘗試將歌曲信息寫入文本文件,但沒有任何內容正在寫入。我正在嘗試將信息寫入onF的部分正在運行,但文件爲空。順便說一句,下面的代碼是遞歸函數的一部分,這是前幾個if語句的原因。有任何想法嗎?爲什麼沒有東西寫入文本文件?

void writeToFile(int artist, int album, int song, int nA, int nAl, int nS) 
{  
    ofstream onF("library.txt"); 
    if(song>=nS) 
    { 
     album+=1; 
     song = 0; 
    } 
    if(album>=nAl) 
    { 
     artist++; 
     album = 0; 
     song = 0; 
    } 
    if(artist>=nA) 
    { 
     onF.close(); 
     return; 
    } 
    if(onF.is_open()) 
    { 
     onF<<artists[artist].artistName<<'#'; 
     onF<<artists[artist].albums[album].albumName<<'#'; 
     onF<<artists[artist].albums[album].songs[song].songName<<'#'; 
     onF<<artists[artist].albums[album].songs[song].songLength<<endl; 
     cout<<"RAN"<<endl; 
    } 
    else 
     cout<<"File could not be opened."<<endl; 
    song++; 
    int numAlbums = artists[artist].numAlbums; 
    int numSongs = artists[artist].albums[album].numSongs; 
    writeToFile(artist, album, song, nA, numAlbums, numSongs); 
} 

既然我有這個工作,我無法加載文件中的信息。它將加載歌曲信息兩次,第二次加載除歌曲標題以外的所有內容。循環運行兩次:

if(inF) 
{ 
    while(!inF.eof()) 
    { 
     getline(inF, newArtist, '#'); 
     getline(inF, newAlbum, '#'); 
     getline(inF, newSong, '#'); 
     inF>>songLength; 
     cout<<"CALLED"<<endl; 
     addSong(newArtist, newAlbum, newSong, songLength, numArtists, 0, 0);  
    } 
    inF.close(); 
    if(inF.is_open()) 
     cout<<"FAILED TO CLOSE"<<endl; 
} 
+1

你能後的函數的簽名,你是如何調用它?打開一個文件將刪除任何現有的內容,所以我假設你的程序確實寫了,只是在最後一次迭代時,它進入'artist> = nA'分支,然後將文件留空。 – slugonamission 2014-12-06 16:36:06

+0

您可以包含整個函數和遞歸調用嗎? – Mureinik 2014-12-06 16:36:14

+0

我剛剛發佈了整個功能 – user3866812 2014-12-06 16:42:18

回答

4

你截斷在進入函數的文件,所以最後的通話將擦除已被寫入所有。

如果要追加,添加的std :: IOS ::應用標誌

+0

感謝您的幫助。我不想追加。我正在向文件寫入程序運行時輸入的所有信息以及程序關閉並再次運行時的信息,我想將所有信息加載回數組中。如果手動寫入文件,加載信息似乎正在工作。有什麼可以建議做的嗎? – user3866812 2014-12-06 16:53:24

+0

我試圖傳遞輸出文件作爲參數,它的工作。感謝您指點我正確的方向! – user3866812 2014-12-06 17:02:58

+0

聽起來像**你**需要在'write'函數中有'for'循環,所以你的'write'函數可以寫入整個文件。但是,您的代碼另有說明。一種選擇是通過引用「write」函數來傳遞函數流。 – 2014-12-06 17:03:44

相關問題