日期:2014-05-17  浏览次数:20940 次

讨论: 如何判断文件是否被修改?
最近在做一个模版系统
需要判断模版文件是否被修改
我自己推敲了一下,   总结出以下几种方案:
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读出文件最后的修改日期与上一次修改日期就可以了