Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

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

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

15
ForEveR
В астрале
Эксперт С++
7993 / 4752 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
20.08.2014, 17:27 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Unifan, А почему бы и нет? Несмотря на то, что в деструкторе он все равно закроется, можно закрыть и явно.
Например дабы переоткрыть с другим файлом, либо же сохранить изменения, которые будут читать сразу после закрытия файла, да много вариантов использования.
1
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 626
20.08.2014, 17:31 #3
Цитата Сообщение от Unifan Посмотреть сообщение
Зачем надо в конце выполнения программы использовать такую команду?
stream.close();
ну я в работе с файлами не очень шарю. Но если например программа постоянно работает, и открывает файлы чтото там делает. Не закрывая файл после накапливается в памяти все открытие файлы и будет все висеть или вообще вылетит. Мое предположение
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.08.2014, 17:31 #4
если stream это объект fstream/ifstrea/etc то можно и не закрывать, оно закроется в деструкторе. для чего это надо? на каждый открытый файл ОС выделяет дескриптор по которому идентифицируется этот файл в программе и все операции в программе с этим дескриптором производят соответствующие действия с файлом.
дескриптор этот - это просто число, закрытие файла подразумевает завершение всех операций с файлом и возвращение дескриптора обратно ОС чтобы та в свою очередь могла выдать его при следующем открытии файла.
1
gromo
372 / 271 / 24
Регистрация: 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 / 11
Регистрация: 10.07.2014
Сообщений: 328
21.08.2014, 11:36 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Звучит как рекомендация экономии дескрипторов
А вспомни Win 3.11 и 95...
там под оконные переменные (внутренние, не только дескрипторы) было 64к всего...
так что экономить надо.

Не по теме:

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



По теме:
Закрывают файл для того, чтобы освободить к нему доступ, записать несохраненные изменения. Просто после окончания его использования.
Если про конец программы... А если ты не освободишь файл, а потом программу дописывать будешь? вот тебе и утечка ресурсов в общем виде.
1
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,111
Завершенные тесты: 1
21.08.2014, 13:14 #8
SatanaXIII, нормальное правило, у меня был случай падения проекта(запущенного в работу)из-за забытого закрытия файла
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.08.2014, 13:52 #9
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Звучит как рекомендация экономии дескрипторов.
именно. на все есть лимит. а в unix-like OS этот лимит даже можно выставить под root-ом
0
SatanaXIII
Супер-модератор
Эксперт С++
5693 / 2748 / 258
Регистрация: 01.11.2011
Сообщений: 6,705
Завершенные тесты: 1
22.08.2014, 09:14 #10
Цитата Сообщение от krv Посмотреть сообщение
А вспомни
2
ValeryS
Модератор
7003 / 5341 / 527
Регистрация: 14.02.2011
Сообщений: 18,034
22.08.2014, 09:20 #11
Цитата Сообщение от Unifan Посмотреть сообщение
Зачем надо в конце выполнения программы использовать такую команду?
это требование Файловых Систем,тех которые я знаю, файл открыт для одной программы,потока , для других недоступен
видел такое сообщение"Файл занят другой программой невозможно удалить"?
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
22.08.2014, 09:49 #12
Цитата Сообщение от Lynatik001 Посмотреть сообщение
ну я в работе с файлами не очень шарю. Но если например программа постоянно работает, и открывает файлы чтото там делает. Не закрывая файл после накапливается в памяти все открытие файлы и будет все висеть или вообще вылетит. Мое предположение
Бред. Запись в файловый поток - это запись именно в долговременную память и никаким переполнением оперативной она не воняет. Просто эта запись кешируется в буфере, физически расположенном в оперативе, но всё, что в этот буфер не влезает, сохраняется на диск. Открыть же новый файл под старым потоком, не закрыв ранее открытый и при это ещё и сохранив в оперативе кеш старого файла невозможно. Закрытие же файла - это всего лишь явное указание выполнить фактическую запись в долговременную память последней порции информации из буфера.
0
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,111
Завершенные тесты: 1
22.08.2014, 09:53 #13
Цитата Сообщение от taras atavin Посмотреть сообщение
Закрытие же файла - это всего лишь явное указание выполнить фактическую запись в долговременную память последней порции информации из буфера.
при открытии выделяется дескриптор, они могут закончится, а закрытие файла делает 2 вещи, первая flush - т.е синхронизирует содержимое потока с файлом(т.е дописывает из потока) вторая, освобождает дескриптор,
Цитата Сообщение от taras atavin Посмотреть сообщение
указание выполнить фактическую запись в долговременную память последней порции информации из буфера.
вот вообще не факт что данные будут записаны......
0
taras atavin
3888 / 1762 / 92
Регистрация: 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
22.08.2014, 10:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 10:16
Привет! Вот еще темы с ответами:

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

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

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

Сортировка пузырьком. Зачем нужно 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; ...


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

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

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