我正在使用cffile创建新文件或更新现有文件,具体取决于用户请求的内容。请求来自前一个过程的表单,因此涉及cffile的代码如下所示:
<cfset thefile = "#form.dyn#">
<cfoutput>
<cfsavecontent variable = "testvar">
#form.editor1#
</cfsavecontent>
<cffile action = "write"
file = "/var/www/reports/#thefile#.cfm"
output = "#testvar#">
</cfoutput>
当我写完文件后,我想向用户确认发生了这种情况。对于一个新文件,我可以使用IsDefined来检查它是否存在。但我想不出一种检查已更新的现有文件的方法。我考虑过cffile上的try / catch,但只有在看上去没有出错的情况下,catch才会运行。如果我没有收到错误,我可以假设一切都好吗?如果可能的话,我更愿意直接检查。有没有人有想法?
答案 0 :(得分:5)
如果<cffile>
不起作用,它会通过抛出异常来告诉您。如果它不这样做,你可以放心地认为它已经有效。不要过度设计您的应用程序。
答案 1 :(得分:4)
您可以将cfdirectory与action="list"
和filter="your-filename"
一起使用,以获取有关上传文件的以下信息:
如果action =“list”,cfdirectory将返回以下结果列,您可以在cfoutput标记中引用它们:
- name:目录条目名称。条目“。”并且“......”不归还。
- directory:包含条目的目录。
- size:目录条目大小。
- type:文件类型:file,用于文件; dir,用于目录。
- dateLastModified:上次修改条目的日期。
- attributes:文件属性(如果适用)。
- 模式:空列;保留以便与UNIX上的ColdFusion 5应用程序向后兼容。
您感兴趣的是dateLastModified
列。
所以你应该能够做到这样的事情:
<cfdirectory action="list" name="dirQuery" directory="C:/var/www/reports/" filter="#thefile#.cfm">
然后您可以转储该结果以查看可供您使用的信息:
<cfdump var="#dirQuery#">
可以访问dateLastModified
列,如下所示:
<cfoutput>#dirQuery.dateLastModified#</cfoutput>
答案 2 :(得分:2)
在更新文件之前使用CFDirectory获取文件dateLastModified
,之后再次使用{{3}}。如果它们不相同,则更新。