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

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

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

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

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

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

Зачем закрывать поток при записи в файл? - C++
Надеюсь, я правильно задал вопрос темы. Просто плохо в этом разбираюсь. Задавал разные вопросы про запись в txt файл у различных людей...

Что такое h -файл и obj-файл?Зачем они нужны? - C++
1.Что такое h -файл и obj-файл?Зачем они нужны?

Зачем нужно u--? - C++
Как я понимаю это счетчик итераций !! но зачем он ?? #include <iostream> #include <stdio.h> #include <conio.h> using namespace...

зачем нужно Временное значение? - C++
void swapper(int &x,int &y) //Функция перемены мест. Если параметры будут без ссылок, то эффекта не будет { int temp; ...

Наследование , зачем оно нужно ? - C++
Добрый день , который день бьюс с темой Добавлено через 3 минуты Понимаю что можно создавать классы окон в Windows от родительского...

Зачем нужно бинарное дерево? - C++
Какие задачи можно решать с помощью бинарного дерева?

Зачем нужно компилировать библиотеку C++ Box2d? - C++
Мне интересна причина того, почему разработчики некоторых C++ библиотек (в моей ситуации Box2d) не дают dll или lib библиотеки, а дают...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
20.08.2014, 17:27     Зачем нужно закрывать файл? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Unifan, А почему бы и нет? Несмотря на то, что в деструкторе он все равно закроется, можно закрыть и явно.
Например дабы переоткрыть с другим файлом, либо же сохранить изменения, которые будут читать сразу после закрытия файла, да много вариантов использования.
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
20.08.2014, 17:31     Зачем нужно закрывать файл? #3
Цитата Сообщение от Unifan Посмотреть сообщение
Зачем надо в конце выполнения программы использовать такую команду?
stream.close();
ну я в работе с файлами не очень шарю. Но если например программа постоянно работает, и открывает файлы чтото там делает. Не закрывая файл после накапливается в памяти все открытие файлы и будет все висеть или вообще вылетит. Мое предположение
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 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
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.08.2014, 13:14     Зачем нужно закрывать файл? #8
SatanaXIII, нормальное правило, у меня был случай падения проекта(запущенного в работу)из-за забытого закрытия файла
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.08.2014, 13:52     Зачем нужно закрывать файл? #9
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Звучит как рекомендация экономии дескрипторов.
именно. на все есть лимит. а в unix-like OS этот лимит даже можно выставить под root-ом
SatanaXIII
Супер-модератор
Эксперт С++
5594 / 2628 / 240
Регистрация: 01.11.2011
Сообщений: 6,470
Завершенные тесты: 1
22.08.2014, 09:14     Зачем нужно закрывать файл? #10
Цитата Сообщение от krv Посмотреть сообщение
А вспомни
ValeryS
Модератор
6543 / 5009 / 462
Регистрация: 14.02.2011
Сообщений: 16,656
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
641 / 562 / 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     Зачем нужно закрывать файл?
Еще ссылки по теме:

Сортировка пузырьком. Зачем нужно 2 цикла? - C++
for(int j=1;j<=k;j++) for(int i=1;i<=k;i++) if(A<A) { max=A; A=A; A=max; ...

Конструкторы - что это и зачем нужно? - C++
Объясните, пожалуйста, для чего нужны конструкторы и деструкторы? Что это вообще?

Зачем нужно private наследование в классах? - C++
Если можно, то покажите небольшой пример

Зачем нужно опережающее объявление класса в заголовке? - C++
Часто натыкаюсь на такой код: class NewType; class Class1 { public: Class1(); private: NewType *field; };

Зачем нужно явно указывать тип переменной? - C++
Всем привет! Объясните зачем нужно явно указывать тип переменной? Например в С++ это обязательно, а php нет. Просто говорят что не...


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

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

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