본문 바로가기

Language/python

win32file - Windows에서 파일 속성 확인 및 수정 하는 방법

회사 보안 감사 때문에, 암호화되지 않은 문서들 일괄 처리 스크립트를 작성중에 Read-Only 속성 걸린 파일 때문에 골치를 썩었다. (이럴때마다, 난 파이썬의 도움을 받곤한다. ㄳㄳ)
간단한 구글링을 통해 아래의 방법으로 Read-Only 속성을 포함한 윈도우 파일 속성을 처리하는 방법을 아래와 같이 정리한다.

  • Win32 Extension for Python을 설치한다.
  • 사용되는 API는 다음과 같다.
    • win32file.GetFileAttributes(file_name)
    • win32file.SetFileAttributes(file_name, new_fattr)
  • 사용되는 속성들은 다음과 같다.
    • win32file.FILE_ATTRIBUTE_ARCHIVE
    • win32file.FILE_ATTRIBUTE_OFFLINE
    • win32file.FILE_ATTRIBUTE_COMPRESSED
    • win32file.FILE_ATTRIBUTE_READONLY
    • win32file.FILE_ATTRIBUTE_DIRECTORY
    • win32file.FILE_ATTRIBUTE_SYSTEM
    • win32file.FILE_ATTRIBUTE_HIDDEN
    • win32file.FILE_ATTRIBUTE_TEMPORARY
    • win32file.FILE_ATTRIBUTE_NORMAL
  • Read-Only 속성을 가지고 있는지 확인하는 예제
def isReadOnly(file):
    fattr = win32file.GetFileAttributes(file)
    ret = fattr & win32file.FILE_ATTRIBUTE_READONLY
    if ret == win32file.FILE_ATTRIBUTE_READONLY:
        return True
    else:
        return False
  • Read-Only를 설정하는 예제
def setReadOnly(file):
    fattr = win32file.GetFileAttributes(file)
    new_fattr = fattr | win32file.FILE_ATTRIBUTE_READONLY
    win32file.SetFileAttributes(file, new_fattr)
  • Read-Only를 해제하는 예제
def unsetReadOnly(file):
    fattr = win32file.GetFileAttributes(file)
    mask = 0xFFFF^win32file.FILE_ATTRIBUTE_READONLY
    new_fattr = fattr & mask
    win32file.SetFileAttributes(file, new_fattr)

다른 파일 속성들도 위의 방법과 같이 적용하면 된다.