如何确认cffile写入成功?

时间:2013-06-25 19:20:30

标签: coldfusion cfml cffile

我正在使用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才会运行。如果我没有收到错误,我可以假设一切都好吗?如果可能的话,我更愿意直接检查。有没有人有想法?

3 个答案:

答案 0 :(得分:5)

如果<cffile>不起作用,它会通过抛出异常来告诉您。如果它不这样做,你可以放心地认为它已经有效。不要过度设计您的应用程序。

答案 1 :(得分:4)

您可以将cfdirectoryaction="list"filter="your-filename"一起使用,以获取有关上传文件的以下信息:

  

如果action =“list”,cfdi​​rectory将返回以下结果列,您可以在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}}。如果它们不相同,则更新。