Уместно ли не закрывать файл сразу после прочтения данных?

281
15 декабря 2016, 16:16

Я открываю файл в С++ (F.open(put);). Далее я читаю оттуда данные, и после этого я уже не использую файл, но я хочу, чтобы до завершения работы программы этот файл никто не смог бы редактировать, кроме моей программы.
Можно ли в этом случае просто не закрывать файл до окончания работы программы, или в этом есть какие-то свои подводные камни?

Answer 1

Взаимодействие с объектами операционной системы зависят от операционной системы. Файлы - объекты операционной системы. Все упирается в средства, которыми Вы взаимодействуете с оперционной системой, позволяют ли они тонко настраивать, или нет. Любые библиотеки (boost.filesystem или базовые средства языка, или что-то еще) - являются обертками над функциями операционной системы для взаимодействия с файлами.

В Windows есть функция CreateFile, которая позволяет управлять, будет ли файл доступен сторонним приложениям, или нет. Аналогичное есть (должно быть :) ) в любой операционной системе. Хорошие обертки над функциями ОС или тоже позволяют это настраивать, или, для реализации единообразности взаимодействия с разными ОС, немного урезают функционал, оставляя только то, что поддерживается большинством ОС.

Лично я F.Open не узнаю, т.е. не могу судить об этой библиотеке.

Отвечая на вопрос: ничто не мешает Вашему ПО создавать объект ядра с теми настройками владения, какие Вам нужны, и держать его, сколько необходимо.

Answer 2

Лучше сразу закрывать всегда, как только прекращаете работу с файлом.
Я не уверена, но думаю, что его всё равно смогут редактировать, даже если он не закрыт. Проведите простой опыт: запустите программу в отладке и до f.close() попытайтесь открыть его вручную, изменить и сохранить эти изменения, и вы найдёте ответ на ваш вопрос.

READ ALSO
Конструктор класса

Конструктор класса

Доброго времени суток

209
Считывание строки

Считывание строки

На вход подается описание бинарного дереваНа листьях (висячих вершинах) этого дерева написаны целые числа (от -10^6 до 10^6)

255
Проблема с наследованием C++, среда Borland Builder 6.0

Проблема с наследованием C++, среда Borland Builder 6.0

Есть такая проблема: имеется иерархия классовВ производных появляются новые методы

238
Строки и слова

Строки и слова

Программа должна выводить, сколько раз каждое слово встречается в строке, но этого не происходитВот код:

192