2016-08-24 7 views
0

Проблема я столкнулся заключается в следующем: если мы определим что-то вродеКак использовать fstream, чтобы писать различные значения в текстовом файле

ofstream myFile; 

    myFile.open("Directory//debug.txt"); 
    for (int i = 0; i < 10; i++) 
    { 
    myFile << i << endl; 
    myFile.close(); 
    } 

вывод в файл отладки будет 9. Я хочу сделать это так, чтобы он выводил все числа от 0 до 9. Помимо закрытия файла после оператора for можно ли определить поток, который будет делать это?

+1

* Почему * Вы хотите, чтобы закрыть поток внутри цикла? И вы не против * открытия * внутри цикла? – Beta

+3

После первой записи вы пишете закрытый файл. Это запрещено. Почему бы вам не закрыть файл после цикла for? – Chris

+1

Итак, вы хотите закрыть внутри цикла, не могли бы вы снова открыть файл внутри цикла? – user

ответ

1

Нет. У вас есть два варианта:

Закрыть файл вне цикла:

myFile.open("Directory//debug.txt"); 
for (int i = 0; i < 10; i++) 
{ 
    myFile << i << endl; 
} 
myFile.close(); 

или открыть файл в режиме добавления и близко внутри цикла:

for (int i = 0; i < 10; i++) 
{ 
    myFile.open("Directory//debug.txt", ios_base::app); 
    myFile << i << endl; 
    myFile.close(); 
} 
+0

У меня есть настройка Я многократно вызываю функцию 'foo' в функции' goo' Я создаю файл в 'foo', и я хочу вывести новое значение каждый раз, когда 'foo' вызывается в' goo' –

+0

Открытие в режиме append похоже на то, что мне нужно, можете ли вы также предоставить синтаксис? Я знаю, что могу искать, но все же. –

+0

@sjsam Я уверен, что он выводит новое значение 'i'. Я имею в виду, что я только что протестировал его. Обе версии работают, т. Е. Со статической переменной и просто открываются в режиме добавления. –

1
myFile.close(); 

следует поместить после цикла. Также введите некоторую ошибку, чтобы проверить, действительно ли open был успешным.

Я вызываю функцию Foo несколько разы в функции слизи я создаю файл в Foo, и я хочу, чтобы вывести новое значение каждый раз, когда Foo называется в слизи.

Для того, чтобы достичь своей цели, вы можете использовать статическую переменную внутри foo

void foo() 
{ 
static int count=0;  
ofstream myfile; 
myfile.open("Directory//debug.txt",std::fstream::app) 

if (myfile.is_open()) // Checking is file is successfully opened. 
{ 
    count++; 
    myfile<<count<<"\n"; 
} 
myfile.close; // Close the file 
} 
+0

У меня есть функция Я многократно вызываю функцию foo в функции goo Я создаю файл в foo, и я хочу вывести новое значение каждый раз, когда foo вызывается в goo. Есть ли способ обхода этого? –

+0

Спасибо. Это тоже хорошее решение, стыдно, что я не могу принять два ответа. Ответ на вопрос owacoder был ближе к тому, что я себе представлял, поэтому я принял это. –

+0

@VahagnTumanyan: Кроме того, вам необходимо ввести некоторую проверку ошибок. Кроме того, for-loop с вашим оригинальным решением совершенно не нужен. – sjsam

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

  • Нет связанных вопросов^_^