Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2009, 19:02   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию запись в файл

Меня интересует вопрос о разнице...

программа ведет лог действий... действия могут совершаться как несколько раз в секунду, так и не совершаться на протяжении минут...

меня интересует, есть ли разница между тем, что я буду открывать файл, записывать в него данные (не большие) и закрывать каждый раз при совершаемом действии....

и между тем, если открыть файл в начале программы, и не закрывая его, вести лог действий... так же в этом случае мне интересно, чем черевато то, что если строка о закрытии открытого файла "src.close();" прописана вовсе не будет, а программу закрыть?

Вообщем поясните пожалуйста, и что лучше юзать
Артэс вне форума Ответить с цитированием
Старый 23.11.2009, 19:44   #2
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Открываешь в начале файл, пишешь туда все, что тебе нужно по мере выполнения программы. В любом месте, где обрабатываешь исключение и/или завершаешь прогу, позаботься о закрытии файла.

Разница есть. Если каждую секунду открывать-закрывать файл, то это скажется на быстродействии. Логично же, не?
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 23.11.2009, 20:03   #3
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Тогда как обработать закрытие программы, что бы закрыть файл? Я консольное приложение писал
Артэс вне форума Ответить с цитированием
Старый 23.11.2009, 20:34   #4
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Если файл открывал с помощью CreateFile, то вызываешь CloseHandle, если с помощью потоков, то f.close().

Так же как и обычно: перед return закрой файл.
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 23.11.2009, 20:39   #5
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

т.е это в самом конце main() перед return 0?
Код:
int main()
{
...
file.close();
}
так что ли?
Артэс вне форума Ответить с цитированием
Старый 23.11.2009, 21:11   #6
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Да, только не вместо, а перед

Код:
int main()
{
...
file.close();
return(0);
}
И везде, где происходит возвращение управления из main, если перед этим был открыт файл, необходимо прописать его закрытие.
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 23.11.2009, 22:54   #7
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

немножко не понимаю... у меня внутри майн, вызывается еще множество функций... и если программа на моменте выполнения одной из тех функций, при закрытии, не выполняется то, что я перед ретурном прописал... я проверил
Артэс вне форума Ответить с цитированием
Старый 23.11.2009, 23:07   #8
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию Это называется обработкой исключений.

Ты беспокоишься о том, что у тебя файл не закроется, а то, что программа вылетит - это нормально?

Для того, чтобы программа всегда завершалась корректно, необходимо отслеживать где она может вылететь или где может быть сбой, чтобы в этом случае всегда обеспечить корректное завершение без потерь данных.

Приведу пример. Допустим, ты открываешь свой файл и выделяешь память для массива:

Код:
 //открываем файл

char *temp;
temp = new char[size];
Если система не сможет выделить запрашиваемое количество памяти size, то в дальнейшем любая попытка использовать массив temp

Код:
strcpy(temp, "Hello!");
Приведет к ошибке.

Для этого после запроса памяти необходимо осуществить проверку:

Код:
 //открываем файл

char *temp;
temp = new char[size];

if(!temp) //если память не выделилась
{
    //закрываем файл, завершаем программу
    return(0);
}
И так везде, где возможен сбой.
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 23.11.2009, 23:32   #9
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

А разве данные не сразу сохраняются в файле, по мере их внесения? даже если не закрывать файл
Артэс вне форума Ответить с цитированием
Старый 24.11.2009, 00:13   #10
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Сразу. Но кто знает что с ними произойдет после некорректного завершения программы?
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в файл Lemo Помощь студентам 3 01.03.2009 19:06
Запись в файл |{ot Общие вопросы Delphi 6 05.07.2008 02:24
Запись в файл [Smarik] Помощь студентам 4 07.05.2008 23:26
Запись в файл В_И_К_Т_О_Р Помощь студентам 9 30.01.2008 22:46
запись в файл Prisian Общие вопросы Delphi 6 24.07.2007 13:43