PythonTip >> 博文 >> python

python 判断 windows 隐藏文件/系统文件 - Jackon Yang

zihua 2014-03-21 15:03:28 点击: 883 | 收藏


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)

原文链接:http://www.tuicool.com/articles/Efeyue

作者:zihua | 分类: python | 标签: python | 阅读: 883 | 发布于: 2014-03-21 15时 |