Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
#1

Запись в файл из разных функций - C++

27.05.2010, 21:22. Просмотров 902. Ответов 14
Метки нет (Все метки)

Хочу писать логи в Один файл из разных функций

делаю так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void main(){
ofstream myfile;
myfile.open ("file_name.html",ios::out  | ios::app);
 
myfile <<"text_1 \n";
function();
 
myfile.close();
}
 
 
void function(){
ofstream myfile;
myfile.open ("file_name.html",ios::out  | ios::app);
myfile <<"text_2 \n";
myfile.close();
}
Я хочу чтобы text_1 был сверху, а text_2 снизу, но у меня получаеться наоборот, сверху text_2, а text_1 снизу
Как будто программа не успев записать text_1 в файл начинаеть выполнять function(); и в итоге текст который в function(); пишеться первым

Как это можно исправить ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2010, 21:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись в файл из разных функций (C++):

Запись и чтение объектов разных классов в один файл - C++
Здравствуйте. Изучаю С++ по Лафоре. Дошёл до места, где объясняется, как записывать объекты разных классов в один бинарник. У Лафоре,...

Группировка функций разных классов - C++
Всем привет! Возник спорный вопрос. Задача: Есть много классов, но у каждого из них может быть (! а может и нет) по методу,...

Динамическая подстановка функций из разных классов - C++
Всем привет! Собственно есть вот такое... struct MyStruct { int index; MyStruct *next, *prev; }; class MyClass { public:

Связка двух функций в разных .cpp файлах - C++
Извиняюсь если тема поднималась, может я плохо искал но не нашел вразумительного объяснения связывания двух функций через заголовочный...

Генетический алгоритм подбора максимума/минимума разных функций - C++
Собсно, вот: #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; #include &lt;algorithm&gt; #include &lt;numeric&gt; #define FIRST...

Вычислить значение разных функций при определенном аргументе - C++
Вычислить значение y в зависимости от выбранной функции ϕ(x), аргумент которой определяется из поставленного условия. Возможные значения...

14
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
27.05.2010, 21:32 #2
Попробуй после записи закрывать файл.
1
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
27.05.2010, 21:37  [ТС] #3
Так я вроде закрываю

C++
1
myfile.close();
хотя пробовал и с myfile.close(); и без результат один
0
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
27.05.2010, 21:46 #4
До вызова function. Потому как все манипуляции с файлом записываются на жесткий после закрытия файла. Вот и получается: открыл файл в мейне, записал строку1, эта строка висит в оперативке. Потом вызываешь функцию, там открывается файл опять (кстати мейновский myfile и в функции это два совершенно разных объекта), записал строку2, закрыл файл, строка2 сбросилась на жесткий. Потом выходишь из функции, закрываешь файл в мейне, на жесткий сбарсывается строка1.
1
time2die
51 / 51 / 3
Регистрация: 25.05.2010
Сообщений: 182
27.05.2010, 22:03 #5
либо передай в функцию дискриптор открытого файла и с ним работай, либо сделай дискриптор глобальным( плохой вариант) а открывать один файл 2 раза - глупо
1
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
27.05.2010, 22:12  [ТС] #6
kazak
спасибо помогло!


time2die,
А как передать дескриптор открытого файла ?
если с ним не придеться закрывать и открывать файл то по идее должно быть удобнее
0
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
27.05.2010, 22:18 #7
Цитата Сообщение от nill Посмотреть сообщение
А как передать дескриптор открытого файла ?
<type> function (ofstream &file_stream, <остальные параметры, если есть>)

Цитата Сообщение от nill Посмотреть сообщение
если с ним не придеться закрывать и открывать файл то по идее должно быть удобнее
может и удобней, но только если программа даст сбой все записи пропадут.
1
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
27.05.2010, 22:28  [ТС] #8
kazak,
Как это пропадут у меня же при открытии файла записи добавляються в конец файла и ничего не удаляеться?
C++
1
myfile.open ("file_name.html",ios::out | ios::app);

Разве тут может чего то пропасть?
0
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
27.05.2010, 22:33 #9
Все что ты записываешь в файл попадает на жесткий после закрытия файла. И если лог вести не закрывая файла, то в случае ошибки программы все новые записи не попадут в файл на жесткий диск.
1
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
27.05.2010, 22:43  [ТС] #10
kazak,

Ну так смотри
в функции main() у меня останеться myfile.close(); в конце

а в function() его не будет

то есть если будет сбой то не запишеться только последние данные которые не дошли до myfile.close(); а все остальные будут целы

Или я не так понял ?
0
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
27.05.2010, 22:47 #11
Цитата Сообщение от nill Посмотреть сообщение
то есть если будет сбой то не запишеться только последние данные которые не дошли до myfile.close();
правильно.
1
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
27.05.2010, 22:49  [ТС] #12
все тогда отлично меня это устраивает
тем более если будет сбой логи за последний проход функции main мне не нужны
главное что все остальное будет целым
0
time2die
51 / 51 / 3
Регистрация: 25.05.2010
Сообщений: 182
27.05.2010, 23:07 #13
а скидывать буфер потока на носитель с помощью функции flush() религия запрещает ?
2
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
27.05.2010, 23:15 #14
Тоже вариант.
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
27.05.2010, 23:23  [ТС] #15
time2die,

уже третий способ один лучше другого, спасибо!
0
27.05.2010, 23:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2010, 23:23
Привет! Вот еще темы с ответами:

Подключение с помощью директивы #include нескольких функций, находящихся в разных файлах. - C++
Здравствуйте, уважаемые программисты. Помогите, пожалуйста, разобраться в такой ситуации: есть несколько функций, каждая из которых...

Можно ли создать свой перегруженный вариант функций, для разных типов потока - C++
Доброго времени суток. Хотелось бы задать несколько вопросов, ответы на которые мне не удалось найти в справочнике. 1. Можно ли...

Перегрузка функций (написать программу вычисления суммы элементов массива разных типов) - C++
Используя перегрузку функций, написать программу вычисления суммы элементов массива разных типов

запись в файл. не создается файл - C++
#include &lt;graphics.h&gt; // vkljy4it' opisanie grafi4eskix fynkcij Ñ/Ñ++ Borland'ah #include&lt;stdio.h&gt; #include &lt;conio.h&gt; // opisanie...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru