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

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

Войти
Регистрация
Восстановить пароль
 
Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
#1

Зачем нужно закрывать файл? - C++

20.08.2014, 17:17. Просмотров 927. Ответов 15
Метки нет (Все метки)

Зачем надо в конце выполнения программы использовать такую команду?
stream.close();
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2014, 17:17     Зачем нужно закрывать файл?
Посмотрите здесь:

C++ Зачем нужно прописывать прототипы отдельно от самой функции??
Зачем закрывать поток при записи в файл? C++
Зачем нужно опережающее объявление класса в заголовке? C++
Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? C++
C++ Что такое h -файл и obj-файл?Зачем они нужны?
Зачем нужно явно указывать тип переменной? C++
Зачем нужно private наследование в классах? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
20.08.2014, 17:27     Зачем нужно закрывать файл? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Unifan, А почему бы и нет? Несмотря на то, что в деструкторе он все равно закроется, можно закрыть и явно.
Например дабы переоткрыть с другим файлом, либо же сохранить изменения, которые будут читать сразу после закрытия файла, да много вариантов использования.
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 617
20.08.2014, 17:31     Зачем нужно закрывать файл? #3
Цитата Сообщение от Unifan Посмотреть сообщение
Зачем надо в конце выполнения программы использовать такую команду?
stream.close();
ну я в работе с файлами не очень шарю. Но если например программа постоянно работает, и открывает файлы чтото там делает. Не закрывая файл после накапливается в памяти все открытие файлы и будет все висеть или вообще вылетит. Мое предположение
Jupiter
Каратель
Эксперт C++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.08.2014, 17:31     Зачем нужно закрывать файл? #4
если stream это объект fstream/ifstrea/etc то можно и не закрывать, оно закроется в деструкторе. для чего это надо? на каждый открытый файл ОС выделяет дескриптор по которому идентифицируется этот файл в программе и все операции в программе с этим дескриптором производят соответствующие действия с файлом.
дескриптор этот - это просто число, закрытие файла подразумевает завершение всех операций с файлом и возвращение дескриптора обратно ОС чтобы та в свою очередь могла выдать его при следующем открытии файла.
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
20.08.2014, 17:52     Зачем нужно закрывать файл? #5
К тому же close() еще проталкивает всю незаписанную информацию из внутренних буферов потоковых объектов в место назначения.
SatanaXIII
21.08.2014, 09:17
  #6

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
на каждый открытый файл ОС выделяет дескриптор по которому идентифицируется этот файл в программе и все операции в программе с этим дескриптором производят соответствующие действия с файлом.
дескриптор этот - это просто число, закрытие файла подразумевает завершение всех операций с файлом и возвращение дескриптора обратно ОС чтобы та в свою очередь могла выдать его при следующем открытии файла.
Звучит как рекомендация экономии дескрипторов.

krv
72 / 52 / 11
Регистрация: 10.07.2014
Сообщений: 328
21.08.2014, 11:36     Зачем нужно закрывать файл? #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Звучит как рекомендация экономии дескрипторов
А вспомни Win 3.11 и 95...
там под оконные переменные (внутренние, не только дескрипторы) было 64к всего...
так что экономить надо.

Не по теме:

как то препод показывал программу, которая размером в 270 байт спутником управляла.
А сейчас что?



По теме:
Закрывают файл для того, чтобы освободить к нему доступ, записать несохраненные изменения. Просто после окончания его использования.
Если про конец программы... А если ты не освободишь файл, а потом программу дописывать будешь? вот тебе и утечка ресурсов в общем виде.
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.08.2014, 13:14     Зачем нужно закрывать файл? #8
SatanaXIII, нормальное правило, у меня был случай падения проекта(запущенного в работу)из-за забытого закрытия файла
Jupiter
Каратель
Эксперт C++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.08.2014, 13:52     Зачем нужно закрывать файл? #9
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Звучит как рекомендация экономии дескрипторов.
именно. на все есть лимит. а в unix-like OS этот лимит даже можно выставить под root-ом
SatanaXIII
Супер-модератор
Эксперт С++
5578 / 2612 / 239
Регистрация: 01.11.2011
Сообщений: 6,422
Завершенные тесты: 1
22.08.2014, 09:14     Зачем нужно закрывать файл? #10
Цитата Сообщение от krv Посмотреть сообщение
А вспомни
ValeryS
Модератор
6482 / 4948 / 455
Регистрация: 14.02.2011
Сообщений: 16,389
22.08.2014, 09:20     Зачем нужно закрывать файл? #11
Цитата Сообщение от Unifan Посмотреть сообщение
Зачем надо в конце выполнения программы использовать такую команду?
это требование Файловых Систем,тех которые я знаю, файл открыт для одной программы,потока , для других недоступен
видел такое сообщение"Файл занят другой программой невозможно удалить"?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.08.2014, 09:49     Зачем нужно закрывать файл? #12
Цитата Сообщение от Lynatik001 Посмотреть сообщение
ну я в работе с файлами не очень шарю. Но если например программа постоянно работает, и открывает файлы чтото там делает. Не закрывая файл после накапливается в памяти все открытие файлы и будет все висеть или вообще вылетит. Мое предположение
Бред. Запись в файловый поток - это запись именно в долговременную память и никаким переполнением оперативной она не воняет. Просто эта запись кешируется в буфере, физически расположенном в оперативе, но всё, что в этот буфер не влезает, сохраняется на диск. Открыть же новый файл под старым потоком, не закрыв ранее открытый и при это ещё и сохранив в оперативе кеш старого файла невозможно. Закрытие же файла - это всего лишь явное указание выполнить фактическую запись в долговременную память последней порции информации из буфера.
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
22.08.2014, 09:53     Зачем нужно закрывать файл? #13
Цитата Сообщение от taras atavin Посмотреть сообщение
Закрытие же файла - это всего лишь явное указание выполнить фактическую запись в долговременную память последней порции информации из буфера.
при открытии выделяется дескриптор, они могут закончится, а закрытие файла делает 2 вещи, первая flush - т.е синхронизирует содержимое потока с файлом(т.е дописывает из потока) вторая, освобождает дескриптор,
Цитата Сообщение от taras atavin Посмотреть сообщение
указание выполнить фактическую запись в долговременную память последней порции информации из буфера.
вот вообще не факт что данные будут записаны......
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.08.2014, 09:58     Зачем нужно закрывать файл? #14
Цитата Сообщение от aLarman Посмотреть сообщение
при открытии выделяется дескриптор, они могут закончится, а закрытие файла делает 2 вещи, первая flush - т.е синхронизирует содержимое потока с файлом(т.е дописывает из потока) вторая, освобождает дескриптор,
В одном потоке двух декрипторов одновременно не бывает.

Добавлено через 35 секунд
Цитата Сообщение от aLarman Посмотреть сообщение
вторая, освобождает дескриптор,
Ну правильно. А нафига его держать, если файл закрыт?

Добавлено через 45 секунд
Цитата Сообщение от aLarman Посмотреть сообщение
вот вообще не факт что данные будут записаны......
При таких ошибках можно за прикладное программирование вообще не браться.
aLarman
22.08.2014, 10:16
  #15

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
При таких ошибках можно за прикладное программирование вообще не браться.
самокритика приветствуется

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 10:19     Зачем нужно закрывать файл?
Еще ссылки по теме:

зачем нужно Временное значение? C++
Наследование , зачем оно нужно ? C++
Зачем нужно u--? C++
Конструкторы - что это и зачем нужно? C++
Сортировка пузырьком. Зачем нужно 2 цикла? C++

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.08.2014, 10:19     Зачем нужно закрывать файл? #16
Почему само?
Yandex
Объявления
22.08.2014, 10:19     Зачем нужно закрывать файл?
Ответ Создать тему
Опции темы

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