讨论: 如何判断文件是否被修改?
最近在做一个模版系统
需要判断模版文件是否被修改
我自己推敲了一下, 总结出以下几种方案:
1. 将待判断文件复制一份, 然后读取副本, 将两个文件进行对比
缺点: 效率非常低下, 系统资源占用会很高, 磁盘空间浪费较大, 不够灵活.
2. 根据待判断文件的最后修改时间, 利用DateLastModified属性同步副本文件(内容为空)的最后修改时间, 再判断时间是否相同.
缺点: 不可行, DateLastModified属性是只读的, 也就是说不能用ASP修改文件的最后修改时间.
3. 根据待判断文件的最后修改时间, 调用Windows API 同步副本文件(内容为空)的最后修改时间, 再进行判断时间是否相同.
缺点: 比较复杂, 而且不灵活, 服务器上可用性几乎为0. 效率可能也很低, 没有实践(我的猜测).
4. 由待判断文件生成一个文档, 该文档用来存储一个或一组文件与之对应的最后修改时间, 读取文档中的值再进行判断.
缺点: 不够灵活, 当文件被修改后, 需要更新文档(可能造成性能损耗)
5. 将待判断文件的最后修改时间存储于Application或Session数组中
优点: 速度快, 灵活性强.
缺点: 服务器重启或IIS重启等不可预测等原因导致的Application和Session丢失, 稳定性较差.
补充:
QUOTE:
原帖由 fyland 于 2007-5-27 15:45 发表
将模板文件的MD5保存起来
下次再读取模板文件之前,比较这次的MD5的值和上次的是不是一样
如果是一样,则表明模板文件没有被修改,如果不一样就表示修改了
在一些下载站下载某个软件时,都会告诉你这个文件 ...
如果ASP能够读取DateLastModified属性(见第二种方案), 那么无疑这将是最完美的一种解决办法(我个人认为), 但这个基本上是不可能的...
所以, 目前除了第5点外, 我已经想不出更好的解决办法, 所以还请各路高人指点下, 说说你的见解和解决方案.
小弟在此感激不尽~~~
PS: 仅限ASP范畴, 如果你说php可以读写文件的最后修改时间的话, 那还是算咯~~~
------解决方案--------------------最笨的方法,在对模板修改后,把这次修改时间戳写到模板文件名里
------解决方案--------------------用FSO读出文件最后的修改日期与上一次修改日期就可以了