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

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

Восстановить пароль Регистрация
 
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
27.05.2010, 21:22     Запись в файл из разных функций #1
Хочу писать логи в Один файл из разных функций

делаю так

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(); пишеться первым

Как это можно исправить ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2010, 21:22     Запись в файл из разных функций
Посмотрите здесь:

C++ Группировка функций разных классов
Можно ли создать свой перегруженный вариант функций, для разных типов потока C++
Запись и чтение объектов разных классов в один файл C++
Динамическая подстановка функций из разных классов C++
C++ Перегрузка функций (написать программу вычисления суммы элементов массива разных типов)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.05.2010, 21:32     Запись в файл из разных функций #2
Попробуй после записи закрывать файл.
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
27.05.2010, 21:37  [ТС]     Запись в файл из разных функций #3
Так я вроде закрываю

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


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

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

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

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

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

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

Или я не так понял ?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.05.2010, 22:47     Запись в файл из разных функций #11
Цитата Сообщение от nill Посмотреть сообщение
то есть если будет сбой то не запишеться только последние данные которые не дошли до myfile.close();
правильно.
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
27.05.2010, 22:49  [ТС]     Запись в файл из разных функций #12
все тогда отлично меня это устраивает
тем более если будет сбой логи за последний проход функции main мне не нужны
главное что все остальное будет целым
time2die
51 / 51 / 3
Регистрация: 25.05.2010
Сообщений: 182
27.05.2010, 23:07     Запись в файл из разных функций #13
а скидывать буфер потока на носитель с помощью функции flush() религия запрещает ?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.05.2010, 23:15     Запись в файл из разных функций #14
Тоже вариант.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2010, 23:23     Запись в файл из разных функций
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
27.05.2010, 23:23  [ТС]     Запись в файл из разных функций #15
time2die,

уже третий способ один лучше другого, спасибо!
Yandex
Объявления
27.05.2010, 23:23     Запись в файл из разных функций
Ответ Создать тему
Опции темы

Текущее время: 15:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru