为什么没有写入文本文件?

时间:2014-12-06 16:33:42

标签: c++ output ofstream

我正在尝试将歌曲信息写入文本文件,但没有写入任何内容。我试图将信息写入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 个答案:

答案 0 :(得分:4)

您在输入函数时截断文件,因此最后一次调用将删除所有已写入的内容。

如果要追加,请添加std :: ios :: app标志