这个例子中涉及了windows的多个api模块,如os,ctypes,win32api,win32con,sys等。
因为有些文件属性的方法在windows和unix上不能通用,这里面涉及的主要是读取和设置文件属性的主要方法。于windows上 python3.10.6下调试通过。
希望能帮到需要的C友们!
import os
import ctypes
import win32api
import win32con
import sys
#文件路径
print('==>指定文件路径:')
path =r'e:\my_project\pythons\pycharm\1.20os文件目录方法\1.20.3chflags\file_test.txt'
'''注意:此处path=r 中用"r"表示后面字符串中的\符号不做转义符处理,而是视为"\"字符输出。'''
print('\tpath=',path) #目录中没有此文件,执行此语句是ok的
##=======================================================
print('==>检查是否存在指定的文件:')
if os.path.exists(path):
print('\t存在')
else:
print('\t不存在,创建之')
##=======================================================
file=open(path,'w+')
file.write('test1122')
file.close()
##=======================================================
##以上打开文件写文件的代码可以用以下部分替换
# with open(path,'w+') as file:
# file.write('test1122')
##=======================================================
print('==>获取当前文件属性:')
attrs=ctypes.windll.kernel32.GetFileAttributesW(path) #GetFileAttributesW() 函数接受的文件路径参数是宽字符类型,因此在传递文件路径时,需要使用 W 结尾的函数,并确保文件路径是 Unicode 字符串
if attrs != -1:
print('\t获取成功')
print('\t成功的文件属性值为:attrs=',attrs)
attrs_hex = hex(attrs)
print('\t成功的(16进制)文件属性值为:attrs_hex=',attrs_hex)
attrs_bin=bin(attrs)
print('\t成功的(2进制)文件属性值为:attrs_bin=', attrs_bin)
else:
print('\t获取失败')
error_code = ctypes.windll.kernel32.GetLastError()
print('\t对应的错误码为: error_code=',error_code)
print('\t错误的文件属性值为: attrs=',attrs)
attrs_hex = hex(attrs)
print('\t错误的(16进制)文件属性值为:attrs_hex=',attrs_hex)
attrs_bin=bin(attrs)
print('\t错误的(2进制)文件属性值为:attrs_bin=', attrs_bin)
sys.exit()
##=======================================================
print('==>判断是否有只读属性:')
#is_readonly = attrs & ctypes.windll.kernel32.FILE_ATTRIBUTE_READONLY
is_readonly = attrs & win32con.FILE_ATTRIBUTE_READONLY
if is_readonly:
print('\t是 is_readonly=', is_readonly)
else:
print('\t否 is_readonly=', is_readonly)
print('==>判断是否有隐藏属性:')
#is_hidden = attrs & ctypes.windll.kernel32.FILE_ATTRIBUTE_HIDDEN
is_hidden = attrs & win32con.FILE_ATTRIBUTE_HIDDEN
if is_hidden:
print('\t是 is_hidden=', is_hidden)
else:
print('\t否 is_hidden=', is_hidden)
##=======================================================
if is_hidden | is_readonly:
print('==>去除只读和隐藏属性')
result = win32api.SetFileAttributes(path, win32con.FILE_ATTRIBUTE_NORMAL)
if result != -1:
print('\t成功 result=',result)
else:
print('\t失败 result=', result)
sys.exit()
##=======================================================
print('==>生成新的文件属性变量值attrs_new(只读+隐藏):')
#attrs_new = (attrs) | (0x01)
attrs_new = (attrs) | win32con.FILE_ATTRIBUTE_READONLY | win32con.FILE_ATTRIBUTE_HIDDEN
print('\tattrs_new=', attrs_new)
attrs_new_hex = hex(attrs_new)
print('\tattrs_new_hex=', attrs_new_hex)
attrs_new_bin = bin(attrs_new)
print('\tattrs_new_bin=', attrs_new_bin)
##=======================================================
print('==>对文件设置新的文件属性:')
result=ctypes.windll.kernel32.SetFileAttributesW(path,attrs_new)
if result != 0:
print('\t设置新属性成功,返回值为:result=', result)
else:
error_code = ctypes.windll.kernel32.GetLastError()
print('\t设置新属性失败,返回值为:result=', result)
print("\tError code=", error_code)
##=======================================================
print('==>检查是否设置了隐藏属性')
if ctypes.windll.kernel32.GetFileAttributesW(path) & win32con.FILE_ATTRIBUTE_READONLY:
print('\tThe file is read-only.')
else:
print('\tThe file is not read-only')
if ctypes.windll.kernel32.GetFileAttributesW(path) & win32con.FILE_ATTRIBUTE_HIDDEN:
print('\tThe file is hidden.')
else:
print('\tThe file is not hidden.')
Windows环境下Python操作文件属性实战
本文提供了一个在Windows上使用Python(3.10.6)操作文件属性的完整示例,涉及到os, ctypes, win32api, win32con, sys等多个API模块。在Windows系统中,这些方法用于读取和设置文件属性,对于Unix系统可能不适用。案例已成功调试,适用于需要此类功能的开发者。"
102997855,7875518,使用位运算解决A+B问题,"['算法', '位操作', '计算', '整数']
1710





