linux 下隱藏文件是以句號 “.” 開頭的文件,根據文件名即可判斷是否為隱藏文件。
win 下是以文件隱藏屬性確定的,所以,只能通過微軟的 API 獲取隱藏屬性來判斷是否為隱藏文件。
1. windows attrib 命令獲取文件隱藏屬性
Syntax
ATTRIB [ + attribute | - attribute ] [pathname] [/S [/D]]
Key
+ : Turn an attribute ON
- : Clear an attribute OFF
pathname : Drive and/or filename e.g. C:\*.txt
/S : Search the pathname including all subfolders.
/D : Process folders as well
attributes:
R Read-only (1)
H Hidden (2)
A Archive (32)
S System (4)
extended attributes:
E Encrypted
C Compressed (128:read-only)
I Not content-indexed
L Symbolic link/Junction (64:read-only)
N Normal (0: cannot be used for file selection)
O Offline
P Sparse file
T Temporary

2. 隱藏屬性值及其含義
Constants - the following attribute values are returned by the GetFileAttributes function:
FILE_ATTRIBUTE_READONLY = 1 (0x1)
FILE_ATTRIBUTE_HIDDEN = 2 (0x2)
FILE_ATTRIBUTE_SYSTEM = 4 (0x4)
FILE_ATTRIBUTE_DIRECTORY = 16 (0x10)
FILE_ATTRIBUTE_ARCHIVE = 32 (0x20)
FILE_ATTRIBUTE_NORMAL = 128 (0x80)
FILE_ATTRIBUTE_TEMPORARY = 256 (0x100)
FILE_ATTRIBUTE_SPARSE_FILE = 512 (0x200)
FILE_ATTRIBUTE_REPARSE_POINT = 1024 (0x400)
FILE_ATTRIBUTE_COMPRESSED = 2048 (0x800)
FILE_ATTRIBUTE_OFFLINE = 4096 (0x1000)
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 8192 (0x2000)
FILE_ATTRIBUTE_ENCRYPTED = 16384 (0x4000)
For example, a file attribute of 0x120 indicates the Temporary + Archive attributes are set (0x100 + 0x20 = 0x120.)
3. python 通過 win32api 獲取文件隱藏屬性
python 官網對 win32API 的簡單說明 https://www.python.org/download/windows/
下載地址 http://sourceforge.net/projects/pywin32/
import win32file · filenames = [r'D:\test', r'D:\test\$RECYCLE.BIN', r'D:\test\.file_test.py.swp', r'D:\test\file_test.py'] for filename in filenames: print '%4d, %s' %(win32file.GetFileAttributesW(filename), filename)
運行結果:

4. 與運算(&)更直觀判斷隱藏文件
示例代碼如下,& 運算的結果與隱藏屬性值相對應,可以更直觀的判斷文件類型。
import win32file import win32con filenames = [r'D:\test', r'D:\test\$RECYCLE.BIN', r'D:\test\.file_test.py.swp', r'D:\test\file_test.py'] for filename in filenames: file_flag = win32file.GetFileAttributesW(filename) is_hiden = file_flag & win32con.FILE_ATTRIBUTE_HIDDEN is_system = file_flag & win32con.FILE_ATTRIBUTE_SYSTEM print '%4d, %s, %s, %s' %(file_flag, is_hiden, is_system, filename)

