在Python中查看Windows文件元数据

0 投票
2 回答
2355 浏览
提问于 2025-04-15 15:02

我正在写一个脚本,当一个单独的程序完成后,给文件的拥有者发邮件。我试过以下方法:

import os
FileInfo = os.stat("test.txt")
print (FileInfo.st_uid)

这个方法的输出是拥有者的ID号码。但我需要的是Windows的用户名。

2 个回答

2

我觉得你唯一的机会就是使用pywin32扩展,然后直接向Windows询问。

基本上,你可以在msdn上查查怎么用C++实现,然后用相应的pywin32函数。

from win32security import GetSecurityInfo, LookupAccountSid
from win32security import OWNER_SECURITY_INFORMATION, SE_FILE_OBJECT

from win32file import CreateFile
from win32file import GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL

fh = CreateFile( __file__, GENERIC_READ, FILE_SHARE_READ, None, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, None )
info = GetSecurityInfo( fh, SE_FILE_OBJECT, OWNER_SECURITY_INFORMATION )

name, domain, type_id = LookupAccountSid( None, info.GetSecurityDescriptorOwner() )
print name, domain, type_id
4

当我不再寻找文件的元数据,而是开始关注文件的安全性时,我找到了我想要的东西。

import tempfile
import win32api
import win32con
import win32security

f = tempfile.NamedTemporaryFile ()
FILENAME = f.name
try:
  sd = win32security.GetFileSecurity (FILENAME,win32security.OWNER_SECURITY_INFORMATION)
  owner_sid = sd.GetSecurityDescriptorOwner ()
  name, domain, type = win32security.LookupAccountSid (None, owner_sid)

  print "I am", win32api.GetUserNameEx (win32con.NameSamCompatible)
  print "File owned by %s\\%s" % (domain, name)
finally:
  f.close ()

这段内容是从 http://timgolden.me.uk/python-on-windows/programming-areas/security/ownership.html 上摘录的。

撰写回答