ファイルフォルダ監視ツール作りたくて調べた。
Pythonでファイルの最終更新時間を取得する方法 | 遍歴プログラマ日記 を参考に。
# -*- coding: utf-8 -*-
import datetime
import os
from time import sleep
def get_lastmodified(filepath):
return os.stat(filepath).st_mtime
def get_lastaccessed(filepath):
return os.stat(filepath).st_atime
def lastmodified_to_dt(lastmodified):
return datetime.datetime.fromtimestamp(lastmodified)
print 'file'
print 'access %.f' % get_lastaccessed('a.txt')
print 'modify %.f' % get_lastmodified('a.txt')
print 'folder'
print 'access %.f' % get_lastaccessed('a')
print 'modify %.f' % get_lastmodified('a')
実験:
- 適当なディレクトリに a.txt と a\a.txt を作り、上記スクリを置く
- 上記スクリを実行
- a.txt をいじる
- 上記スクリを実行
- 最終アクセス時間、最終修正時間はどうなってる?
Q: st_mtime あるいは st_atime を用いて「変更された」をゲットできるか?
A: 部分的なら可能。詳しくは以下。
- ファイル
- ⭕ 中身が編集された時
- ❌ プロパティが変更された時、リネームされた時
- フォルダ
- ⭕ 配下のファイルが新規、削除、リネームされた時
- ❌ フォルダ内ファイルを編集された時、フォルダのプロパティが更新された時
結果を踏まえると、「st_mtime あるいは st_atime を用いてファイル監視を作りたい場合、ファイル内容が変更された時しか検出できない。同上、フォルダ監視を作りたい場合、配下のファイルが CUD された時しか検出できない」と言える。
一番痛いのは フォルダ内ファイルを編集したとしてもそのフォルダの更新がわからない ってことか。st_mtime や st_atime を見るだけではダメってこと。フォルダだけでなくファイルのそれらもチェックしなきゃいけないってことか。だるい。