如何从Python更改Windows文件的文件创builddate?

如何从Python更改Windows文件的文件创builddate?

牦牛刮胡子赢了。

 import pywintypes, win32file, win32con def changeFileCreationTime(fname, newtime): wintime = pywintypes.Time(newtime) winfile = win32file.CreateFile( fname, win32con.GENERIC_WRITE, win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE, None, win32con.OPEN_EXISTING, win32con.FILE_ATTRIBUTE_NORMAL, None) win32file.SetFileTime(winfile, wintime, None, None) winfile.close() 

这段代码在没有ValueError: astimezone() cannot be applied to a naive datetime python 3上工作ValueError: astimezone() cannot be applied to a naive datetime

 wintime = datetime.datetime.utcfromtimestamp(newtime).replace(tzinfo=datetime.timezone.utc) winfile = win32file.CreateFile( fname, win32con.GENERIC_WRITE, win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE, None, win32con.OPEN_EXISTING, win32con.FILE_ATTRIBUTE_NORMAL, None) win32file.SetFileTime(winfile, wintime) winfile.close() 

首先安装pywin32扩展 https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/

 import win32file import pywintypes # main logic function def changeFileCreateTime(path, ctime): # path: your file path # ctime: Unix timestamp # open file and get the handle of file # API: http://timgolden.me.uk/pywin32-docs/win32file__CreateFile_meth.html handle = win32file.CreateFile( path, # file path win32file.GENERIC_WRITE, # must opened with GENERIC_WRITE access 0, None, win32file.OPEN_EXISTING, 0, 0 ) # create a PyTime object # API: http://timgolden.me.uk/pywin32-docs/pywintypes__Time_meth.html PyTime = pywintypes.Time(ctime) # reset the create time of file # API: http://timgolden.me.uk/pywin32-docs/win32file__SetFileTime_meth.html win32file.SetFileTime( handle, PyTime ) # example changeFileCreateTime('C:/Users/percy/Desktop/1.txt',1234567789) 
 import os os.utime(path, (accessed_time, modified_time)) 

http://docs.python.org/library/os.html

以下是接受的答案的更强大的版本。 它也有相反的吸气功能。 这个地址创建,修改和访问日期时间。 它处理将datetime参数作为datetime.datetime对象提供,或者作为“自纪元以来的秒数”(getter返回值)。 此外,它调整为白天节电时间,这是接受的答案没有。 没有这一点,当您在实际系统时间的反向阶段中设置了冬季或夏季时,您的时间将无法正确设置。

这个答案的主要弱点是它仅适用于Windows(这回答了提出的问题)。 将来,我会尝试发布一个跨平台的解决方案。

 def isWindows() : import platform return platform.system() == 'Windows' def getFileDateTimes( filePath ): return ( os.path.getctime( filePath ), os.path.getmtime( filePath ), os.path.getatime( filePath ) ) def setFileDateTimes( filePath, datetimes ): try : import datetime import time if isWindows() : import win32file, win32con ctime = datetimes[0] mtime = datetimes[1] atime = datetimes[2] # handle datetime.datetime parameters if isinstance( ctime, datetime.datetime ) : ctime = time.mktime( ctime.timetuple() ) if isinstance( mtime, datetime.datetime ) : mtime = time.mktime( mtime.timetuple() ) if isinstance( atime, datetime.datetime ) : atime = time.mktime( atime.timetuple() ) # adjust for day light savings now = time.localtime() ctime += 3600 * (now.tm_isdst - time.localtime(ctime).tm_isdst) mtime += 3600 * (now.tm_isdst - time.localtime(mtime).tm_isdst) atime += 3600 * (now.tm_isdst - time.localtime(atime).tm_isdst) # change time stamps winfile = win32file.CreateFile( filePath, win32con.GENERIC_WRITE, win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE, None, win32con.OPEN_EXISTING, win32con.FILE_ATTRIBUTE_NORMAL, None) win32file.SetFileTime( winfile, ctime, atime, mtime ) winfile.close() else : """MUST FIGURE OUT...""" except : pass 

这是一个在Python 3.5和Windows 7上工作的解决方案。非常简单。 我承认这是潦草的编码…但它的工作原理。 欢迎您清理它。 我只需要一个快速soln。

 import pywintypes, win32file, win32con, datetime, pytz def changeFileCreationTime(fname, newtime): wintime = pywintypes.Time(newtime) winfile = win32file.CreateFile(fname, win32con.GENERIC_WRITE, win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE, None, win32con.OPEN_EXISTING, win32con.FILE_ATTRIBUTE_NORMAL, None) win32file.SetFileTime( winfile, wintime, wintime, wintime) # None doesnt change args = file, creation, last access, last write # win32file.SetFileTime(None, None, None, None) # does nonething winfile.close() if __name__ == "__main__": local_tz = pytz.timezone('Antarctica/South_Pole') start_date = local_tz.localize(datetime.datetime(1776,7,4), is_dst=None) changeFileCreationTime(r'C:\homemade.pr0n', start_date )