2011-01-13 2 views
1

다른 플래그 (이 경우 FILE_FLAG_NO_BUFFERING이있는 플래그와없는 플래그)를 사용하여 같은 파일을 두 번 열 수 있습니까 (CreateFileA 포함)?동일한 파일을 다른 플래그로 두 번 여는 중입니까?

자세한 내용은 다음과 같습니다. 시작시 임시 파일을 만듭니다 (FILE_FLAG_DELETE_ON_CLOSE 포함). 나는 그것을 순차적으로 채우고, 나는이 부분에서 버퍼링되지 않은 IO를 수행하는 것에 대해 걱정하고 싶지 않다. 그런 다음 프로세스가 실행되는 동안 버퍼링되지 않은 입출력을 사용하여 해당 파일에 액세스하려고합니다. 내 자신의 캐싱 논리가 있기 때문입니다. 따라서 FILE_FLAG_NO_BUFFERING을 사용하여 동일한 파일을 다시 열어 본 다음 이전 핸들을 닫을 생각입니다. 두 가지 이유로이 중복 된 방법으로이 작업을 수행하려고합니다.

  1. 동시성. 새 핸들을 열기 전에 이전 핸들을 닫으면 다른 누군가가 그 동안 파일을 엉망으로 만들 수 있습니다.
  2. FILE_FLAG_DELETE_ON_CLOSE는 다른 핸들을 열지 않고 첫 번째 핸들을 닫으면 파일을 삭제합니다. 이것은 내가 해결할 수있는 사소한 성가심입니다.
+0

무작위 질문 : 왜 'CreateFileW' 대신에'CreateFileA'를 사용하고 싶습니까? – Joey

+1

전체 시스템을 직접 작성하지는 않았지만이 부분 만 작성했습니다. 그들은 파일 이름을 char *로 지정했기 때문에 char * :-)로 사용했습니다. 게다가 WCHAR이 어째서 어리석은 지에 대한 전체 호언 장담을 쓸 수있었습니다. 물론 윈도우 API에서 그 사용법이 너무 풍부하다는 점을 제외하고는 당신은 그것을 사용해야 만합니다. –

+0

아, 좋아. 죄송합니다. 여기에 감정을 나타내지 만, 필자는 레거시 코드 페이지에 맞지 않는 유니 코드를 사용하는 폴더가 몇 개 있기 때문에 파일을 열지 않는 응용 프로그램에서 충분히 자주 물지는 경우가 있습니다. – Joey

답변

1

FILE_SHARE_DELETE를 공유 모드에 포함해야합니다. 나는 FILE_FLAG_DELETE_ON_CLOSE가 "당신"의 핸들 이상에 영향을주는 유일한 플래그라고 생각한다.

0

어리석은가요?

두 번 열려면 이전 핸들을 닫은 후에 누군가가 파일을 엉망으로 만들 수 있습니다. 그러나 현실은 당신이 당신의 파일을 엉망으로 만들려고 노력하고 있다는 것입니다.

독점적 인 파일 접근을 보장 할 수 없다면 누군가가 무언가를하는 것을 어떻게 막을 수 있습니까? 그러나 파일을 다시 열 수있는 방법을 독점적으로 여는 경우?

AFAIK, 파일이 이미 열려 있으면 독점적으로 더 이상 열린 프로세스가 허용되지 않습니다.

+3

처음으로 파일을 열 때 공유 쓰기를 지정해야한다는 것은 사실이지만, 그는 LockFile()을 사용하여 잠글 수 있지만 FILE_FLAG_DELETE_ON_CLOSE을 사용하고 있기 때문에이 파일은 임시 파일이며 다른 응용 프로그램이 아마도 엉망이 될 것이라고 생각하지 않을 것입니다. – Anders

+0

@Anders LockFile .. 오 .. 그런 API를 몰랐습니다. 있다. 의견을 밝혀 주셔서 감사합니다. – 9dan

관련 문제