Windows API를 사용하면 FILE_SHARE_DELETE
권한없이 다른 프로세스에서 열려있는 파일의 이름을 바꿀 수 있습니까?FILE_SHARE_DELETE없이 다른 프로세스에서 열려있는 파일의 이름 바꾸기
주을 : 모두 삭제하고 이름 바꾸기 작업 액세스를 허용 삭제
는 내가 말할이가CreateFile
docs에 따라 불가능하다 생각했다. 최종 사용자의 명령 프롬프트에서 일반rename
을 통해 이름 변경과 일관성
은, 나는 종종 The process cannot access the file because it is being used by another process.
가 발생했습니다; 최종 사용자 GUI 및 파이썬의 os.rename
을 통해 이름을 바꾸면 비슷한 오류가 발생합니다. 이름을 변경하는 것은 문제가 결코 다른 프로세스가없는 공유를 삭제 열린 파일이있는 경우
삭제가 실패합니다
그러나, this 높은 upvoted 대답은 반대 상태로 보인다.
그리고 그것은 단순한 사안이 아닙니다. 전체 답변은 해당 성명에 따라 달라집니다. 삭제시 이름 변경이 실패하지 않으면 OP 문제 만 해결합니다.
무엇이 누락 되었습니까?
참고 : 중요한 점은 C# API (C# API보다 강력하다고 가정)를 사용하는 Windows 10을 말합니다.
편집 : 코드 스 니펫을 new question으로 옮겼습니다.
하지만 왜 3 파일 인수가있는'File.Replace'가 대상 파일이 사용 중이더라도 성공합니까? 재부팅 될 때까지 백업 이름의 대상 이름 변경이 지연되는 경우 대상의 이름을 대상으로 변경하는 작업이 실패합니다. – max
'File.Replace'는 다른 작업입니다. 이 파일은 ['ReplaceFile'] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365512(v=vs.85)asp)에 매핑됩니다. 'lpReplacedFileName'이 다른 앱에 의해 열릴 때 이것이 성공할 수있는 이유는 http://stackoverflow.com/questions/32860388/replacefile-alternative-when-application-keeps-file-locked를보십시오. –
와우 내 질문에 대한 전체 답변은 매우 다른 질문에 [삭제 된 대답] (http://stackoverflow.com/a/32862684/336527)에 포함되어 있습니다 ... 그래서 IIUC'ReplaceFile'은 파일 메타 데이터를 변경합니다 (= 디렉토리 항목). 매우 깔끔하고, Windows에서 원자 적 파일 쓰기를 구현하는 유일한 방법이기 때문에 잘 알려지지 않았습니다. 어쩌면 당신은 당신의 대답에이 정보를 추가 할 수 있습니다. – max