Почему ничего не записывается в текстовый файл?

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 а затем просто оставляет файл пустым.
  • 0
    Можете ли вы включить всю функцию и рекурсивный вызов, пожалуйста?
Показать ещё 2 комментария
Теги:
output
ofstream

1 ответ

4
Лучший ответ

Вы усекаете файл при входе в функцию, поэтому последний вызов стирает все, что было написано.

Если вы хотите добавить, добавьте флаг std :: ios :: app

  • 0
    Спасибо за помощь. Я не хочу добавлять, хотя. Я пытаюсь записать в файл всю информацию, которая была введена во время работы программы, и когда программа закрывается и запускается снова, я хочу загрузить всю информацию обратно в массив. Загрузка информации, кажется, работает, если я вручную пишу в файл. Есть что-нибудь, что вы можете предложить сделать?
  • 0
    Я попытался передать выходной файл в качестве аргумента, и это сработало. Спасибо, что указал мне правильное направление!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню