Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/10: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
#1

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

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

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

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

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить?
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не...

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

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

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

15
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
20.08.2014, 17:27 #2
Лучший ответ Сообщение было отмечено Jupiter как решение

Решение

Unifan, А почему бы и нет? Несмотря на то, что в деструкторе он все равно закроется, можно закрыть и явно.
Например дабы переоткрыть с другим файлом, либо же сохранить изменения, которые будут читать сразу после закрытия файла, да много вариантов использования.
1
Lynatik001
38 / 32 / 13
Регистрация: 28.09.2012
Сообщений: 626
20.08.2014, 17:31 #3
Цитата Сообщение от Unifan Посмотреть сообщение
Зачем надо в конце выполнения программы использовать такую команду?
stream.close();
ну я в работе с файлами не очень шарю. Но если например программа постоянно работает, и открывает файлы чтото там делает. Не закрывая файл после накапливается в памяти все открытие файлы и будет все висеть или вообще вылетит. Мое предположение
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.08.2014, 17:31 #4
если stream это объект fstream/ifstrea/etc то можно и не закрывать, оно закроется в деструкторе. для чего это надо? на каждый открытый файл ОС выделяет дескриптор по которому идентифицируется этот файл в программе и все операции в программе с этим дескриптором производят соответствующие действия с файлом.
дескриптор этот - это просто число, закрытие файла подразумевает завершение всех операций с файлом и возвращение дескриптора обратно ОС чтобы та в свою очередь могла выдать его при следующем открытии файла.
1
gromo
372 / 271 / 30
Регистрация: 04.09.2009
Сообщений: 1,214
20.08.2014, 17:52 #5
К тому же close() еще проталкивает всю незаписанную информацию из внутренних буферов потоковых объектов в место назначения.
1
SatanaXIII
21.08.2014, 09:17
  #6

Не по теме:

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

0
krv
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 328
21.08.2014, 11:36 #7
Лучший ответ Сообщение было отмечено Unifan как решение

Решение

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Звучит как рекомендация экономии дескрипторов
А вспомни Win 3.11 и 95...
там под оконные переменные (внутренние, не только дескрипторы) было 64к всего...
так что экономить надо.

Не по теме:

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



По теме:
Закрывают файл для того, чтобы освободить к нему доступ, записать несохраненные изменения. Просто после окончания его использования.
Если про конец программы... А если ты не освободишь файл, а потом программу дописывать будешь? вот тебе и утечка ресурсов в общем виде.
1
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
21.08.2014, 13:14 #8
SatanaXIII, нормальное правило, у меня был случай падения проекта(запущенного в работу)из-за забытого закрытия файла
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.08.2014, 13:52 #9
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Звучит как рекомендация экономии дескрипторов.
именно. на все есть лимит. а в unix-like OS этот лимит даже можно выставить под root-ом
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
22.08.2014, 09:14 #10
Цитата Сообщение от krv Посмотреть сообщение
А вспомни
2
ValeryS
Модератор
7211 / 5474 / 681
Регистрация: 14.02.2011
Сообщений: 18,515
22.08.2014, 09:20 #11
Цитата Сообщение от Unifan Посмотреть сообщение
Зачем надо в конце выполнения программы использовать такую команду?
это требование Файловых Систем,тех которые я знаю, файл открыт для одной программы,потока , для других недоступен
видел такое сообщение"Файл занят другой программой невозможно удалить"?
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
22.08.2014, 09:49 #12
Цитата Сообщение от Lynatik001 Посмотреть сообщение
ну я в работе с файлами не очень шарю. Но если например программа постоянно работает, и открывает файлы чтото там делает. Не закрывая файл после накапливается в памяти все открытие файлы и будет все висеть или вообще вылетит. Мое предположение
Бред. Запись в файловый поток - это запись именно в долговременную память и никаким переполнением оперативной она не воняет. Просто эта запись кешируется в буфере, физически расположенном в оперативе, но всё, что в этот буфер не влезает, сохраняется на диск. Открыть же новый файл под старым потоком, не закрыв ранее открытый и при это ещё и сохранив в оперативе кеш старого файла невозможно. Закрытие же файла - это всего лишь явное указание выполнить фактическую запись в долговременную память последней порции информации из буфера.
0
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
22.08.2014, 09:53 #13
Цитата Сообщение от taras atavin Посмотреть сообщение
Закрытие же файла - это всего лишь явное указание выполнить фактическую запись в долговременную память последней порции информации из буфера.
при открытии выделяется дескриптор, они могут закончится, а закрытие файла делает 2 вещи, первая flush - т.е синхронизирует содержимое потока с файлом(т.е дописывает из потока) вторая, освобождает дескриптор,
Цитата Сообщение от taras atavin Посмотреть сообщение
указание выполнить фактическую запись в долговременную память последней порции информации из буфера.
вот вообще не факт что данные будут записаны......
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
22.08.2014, 09:58 #14
Цитата Сообщение от aLarman Посмотреть сообщение
при открытии выделяется дескриптор, они могут закончится, а закрытие файла делает 2 вещи, первая flush - т.е синхронизирует содержимое потока с файлом(т.е дописывает из потока) вторая, освобождает дескриптор,
В одном потоке двух декрипторов одновременно не бывает.

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

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

Не по теме:

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

0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
22.08.2014, 10:19 #16
Почему само?
0
22.08.2014, 10:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 10:19

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

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

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


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

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

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