這裡要先說明的是,各種作業系統與檔案系統的設計有所不同(如POSIX標準的定義中並無建立時間),這個檔案建立日期時間是Windows中才有的,所以以下的範例代碼僅用在Windows平台。Python也要先裝好pywin32 (Python extensions for Windows)才行。
另外一個提醒:有一些免費的Windows軟體已提供了修改檔案建立/修改/存取日期時間的功能,像BulkFileChanger。如果不是特別複雜的情況,通常這類工具就夠用了,不必自己寫。
以下的例子是修改一test.txt檔案的建立時間,直接放範例代碼與說明。Python需透過pywin32使用Windows API來達成這個工作,範例代碼如下:
import datetime
from win32file import CreateFile, SetFileTime, CloseHandle, GENERIC_WRITE, OPEN_EXISTING
filename = 'test.txt'
now = datetime.datetime.now()
print('以下將設定{}的檔案建立時間為現在的時間:{}'.format(filename, now.strftime('%Y-%m-%d %H:%M:%S')))
CreationTime = datetime.datetime.utcfromtimestamp(now.timestamp()).replace(tzinfo=datetime.timezone.utc)
print(CreationTime)
Handle = CreateFile(filename, GENERIC_WRITE, 0, None, OPEN_EXISTING, 0, 0)
try:
SetFileTime(Handle, CreationTime, None, None)
finally:
CloseHandle(Handle)
傳給SetFileTime()的時間必須帶有時區資訊,否則會出現以下錯誤:ValueError: astimezone() cannot be applied to a naive datetimeprint(CreationTime)可觀察到這個時間是帶有時區資訊的。
SetFileTime()也可以設定檔案的修改/存取時間,這裡沒用到故設為None。
詳細的用法可看一下pywin32的說明文件。裝好pywin32後,它有提供一個說明檔在python的子目錄下:Lib\site-packages\PyWin32.chm
參考
- https://stackoverflow.com/a/36494602
沒有留言:
張貼留言