Открытие одного и того же файла дважды с разными флагами? - PullRequest
1 голос
/ 14 января 2011

Могу ли я открыть один и тот же файл дважды (с помощью CreateFileA ), используя различные флаги (в данном случае, один с FILE_FLAG_NO_BUFFERING, а другой без)?

Подробно, это тот случай: во время запуска я создаю временный файл (с FILE_FLAG_DELETE_ON_CLOSE). Я заполняю его последовательно, и я не хочу беспокоиться о выполнении небуферизованного ввода-вывода в этой части. Затем, пока процесс запущен, я хочу получить доступ к этому файлу с помощью небуферизованного ввода-вывода, потому что у меня есть своя собственная логика кэширования. Таким образом, я думаю снова открыть тот же файл, на этот раз с FILE_FLAG_NO_BUFFERING, а затем закрыть старый дескриптор. Я хочу сделать это таким образом, по двум причинам:

  1. параллелизм. Если я закрою старый дескриптор до того, как открою новый, тем временем кто-то другой может связываться с моим файлом.
  2. FILE_FLAG_DELETE_ON_CLOSE удалит мой файл, когда я закрою первый дескриптор, не открывая другой. Это небольшое раздражение, которое я мог бы обойти.

Ответы [ 2 ]

1 голос
/ 14 января 2011

Просто не забудьте включить FILE_SHARE_DELETE в режиме общего доступа. Я думаю, что FILE_FLAG_DELETE_ON_CLOSE - единственный флаг, который влияет не только на «ваш» дескриптор.

0 голосов
/ 14 января 2011

Разве это не смешно?

Вы хотите открыть дважды, потому что если открыть после закрытия предыдущего дескриптора, кто-то может связываться с вашим файлом. Но реальность такова, что вы пытаетесь возиться со своим файлом.

Если вы не можете гарантировать эксклюзивный доступ к файлам, как вы можете помешать кому-то что-то сделать? Но если вы открываете исключительно, как вы можете открыть файл?

AFAIK, если файл уже открыт исключительно, больше не разрешается открывать, даже из того же процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...