2014-12-06 15 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

+0

Можете ли вы включить всю функцию и рекурсивный звонок, пожалуйста? – Mureinik

+0

Я только что опубликовал всю функцию – user3866812

ответ

4

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

Если вы хотите добавить, добавить зЬй :: :: Ios флаг приложения

+0

Спасибо за помощь. Однако я не хочу добавлять. Я пытаюсь записать в файл всю информацию, которая была введена во время работы программы, и когда программа закрыта и снова запущена. Я хочу загрузить всю информацию обратно в массив. Загрузка информации, похоже, работает, если я вручную записываю файл. Есть ли что-нибудь, что вы можете предложить? – user3866812

+0

Я попытался передать выходной файл в качестве аргумента, и он сработал. Спасибо, что указал мне в правильном направлении! – user3866812

+0

Похоже, что ** вы должны иметь цикл 'for' в вашей функции' write', поэтому ваша функция 'write' может записать весь файл. Однако ваш код говорит иначе. Один из вариантов - передать поток функций по ссылке на вашу функцию 'write'. –

Смежные вопросы