import os import ctypes as ct import ctypes.wintypes as w NO_ERROR = 0 INVALID_FILE_SIZE = w.DWORD(0xFFFFFFFF).value INVALID_FILE_ATTRIBUTES = w.DWORD(-1).value FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000 # Helpers to raise exceptions on API failures. def filesizecheck(result, func, args): if result == INVALID_FILE_SIZE and (err := ct.get_last_error()) != NO_ERROR: raise ct.WinError(err) return result def attributecheck(result, func, args): if result == INVALID_FILE_ATTRIBUTES: raise ct.WinError(ct.get_last_error()) return result kernel32 = ct.WinDLL('kernel32', use_last_error=True) GetCompressedFileSize = kernel32.GetCompressedFileSizeW GetCompressedFileSize.argtypes = w.LPCWSTR, w.LPDWORD GetCompressedFileSize.restype = w.DWORD GetCompressedFileSize.errcheck = filesizecheck GetFileAttributes = kernel32.GetFileAttributesW GetFileAttributes.argtypes = w.LPCWSTR, GetFileAttributes.restype = w.DWORD GetFileAttributes.errcheck = attributecheck fullpath=r"u:\D1\Days\Stefajir\user\default.htm" local_size = GetCompressedFileSize(fullpath, None) attributes = GetFileAttributes(fullpath) print(local_size) print(attributes) print(FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS) if attributes & FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS and local_size != 0: print(f'0x{attributes:08X} {local_size:6d} {fullpath}')