0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
|
|
1 | |
Зачем нужно закрывать файл?20.08.2014, 17:17. Показов 16540. Ответов 15
Метки нет (Все метки)
0
|
20.08.2014, 17:17 | |
Ответы с готовыми решениями:
15
Зачем закрывать поток при записи в файл? Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? Что такое h -файл и obj-файл?Зачем они нужны? Зачем нужно u--? |
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
20.08.2014, 17:27 | 2 |
Сообщение было отмечено Jupiter как решение
Решение
Unifan, А почему бы и нет? Несмотря на то, что в деструкторе он все равно закроется, можно закрыть и явно.
Например дабы переоткрыть с другим файлом, либо же сохранить изменения, которые будут читать сразу после закрытия файла, да много вариантов использования.
1
|
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
|
|
20.08.2014, 17:31 | 3 |
ну я в работе с файлами не очень шарю. Но если например программа постоянно работает, и открывает файлы чтото там делает. Не закрывая файл после накапливается в памяти все открытие файлы и будет все висеть или вообще вылетит. Мое предположение
0
|
Каратель
|
|
20.08.2014, 17:31 | 4 |
если stream это объект fstream/ifstrea/etc то можно и не закрывать, оно закроется в деструкторе. для чего это надо? на каждый открытый файл ОС выделяет дескриптор по которому идентифицируется этот файл в программе и все операции в программе с этим дескриптором производят соответствующие действия с файлом.
дескриптор этот - это просто число, закрытие файла подразумевает завершение всех операций с файлом и возвращение дескриптора обратно ОС чтобы та в свою очередь могла выдать его при следующем открытии файла.
1
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
20.08.2014, 17:52 | 5 |
К тому же close() еще проталкивает всю незаписанную информацию из внутренних буферов потоковых объектов в место назначения.
1
|
SatanaXIII
|
21.08.2014, 09:17
#6
|
0
|
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
|
|
21.08.2014, 11:36 | 7 |
Сообщение было отмечено Unifan как решение
Решение
А вспомни Win 3.11 и 95...
там под оконные переменные (внутренние, не только дескрипторы) было 64к всего... так что экономить надо. Не по теме: как то препод показывал программу, которая размером в 270 байт спутником управляла. По теме: Закрывают файл для того, чтобы освободить к нему доступ, записать несохраненные изменения. Просто после окончания его использования. Если про конец программы... А если ты не освободишь файл, а потом программу дописывать будешь? вот тебе и утечка ресурсов в общем виде.
1
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
21.08.2014, 13:14 | 8 |
SatanaXIII, нормальное правило, у меня был случай падения проекта(запущенного в работу)из-за забытого закрытия файла
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
22.08.2014, 09:14 | 10 |
2
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
22.08.2014, 09:20 | 11 |
это требование Файловых Систем,тех которые я знаю, файл открыт для одной программы,потока , для других недоступен
видел такое сообщение"Файл занят другой программой невозможно удалить"?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
22.08.2014, 09:49 | 12 |
Бред. Запись в файловый поток - это запись именно в долговременную память и никаким переполнением оперативной она не воняет. Просто эта запись кешируется в буфере, физически расположенном в оперативе, но всё, что в этот буфер не влезает, сохраняется на диск. Открыть же новый файл под старым потоком, не закрыв ранее открытый и при это ещё и сохранив в оперативе кеш старого файла невозможно. Закрытие же файла - это всего лишь явное указание выполнить фактическую запись в долговременную память последней порции информации из буфера.
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
22.08.2014, 09:53 | 13 |
при открытии выделяется дескриптор, они могут закончится, а закрытие файла делает 2 вещи, первая flush - т.е синхронизирует содержимое потока с файлом(т.е дописывает из потока) вторая, освобождает дескриптор,
вот вообще не факт что данные будут записаны......
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
22.08.2014, 09:58 | 14 |
В одном потоке двух декрипторов одновременно не бывает.
Добавлено через 35 секунд Ну правильно. А нафига его держать, если файл закрыт? Добавлено через 45 секунд При таких ошибках можно за прикладное программирование вообще не браться.
0
|
aLarman
|
22.08.2014, 10:16
#15
|
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
22.08.2014, 10:19 | 16 |
Почему само?
0
|
22.08.2014, 10:19 | |
22.08.2014, 10:19 | |
Помогаю со студенческими работами здесь
16
Чтение памяти другого процесса по таймеру: нужно ли закрывать хэндл процесса? Зачем закрывать поток чтобы записать данные в файл? Нужно ли закрывать файл Зачем закрывать поток? (FileStream) Зачем закрывать подключение при работе с Entity Framework? Зачем в .NET в 2014 г. строгая типизация? Зачем нужно писать Convert.ToInt32(), ToString(), Int32.Parse()? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |