CFFILE使用APPEND或WRITE创建文件

时间:2016-11-30 21:56:52

标签: coldfusion coldfusion-11

我遇到coldfusion11网站的问题,在某些情况下,我创建和发送报告文件的尝试失败,显然是由于权限问题。我无法在我的测试/开发环境中重新创建问题所以我需要了解实时修复的情况,我不能只是在生产中随意更改代码。当前代码使用APPEND操作创建文件,如下所示:

<cfset f_dir = EXCEL_PATH >
<cfset f_name = CreateUUID() & ".csv">
<cffile action="APPEND" file="#f_dir##f_name#" output="My Report "
addnewline="Yes">
<cffile action="APPEND" file="#f_dir##f_name#"
output="Title,#attributes.title#" addnewline="Yes">

代码中的其他地方是使用WRITE作为第一个cffile动作的类似函数,如下所示:

<cfset f_dir = EXCEL_PATH >
<cfset f_name = CreateUUID() & ".csv">
<cffile action="WRITE" file="#f_dir##f_name#" output="My Report "
addnewline="Yes">
<cffile action="APPEND" file="#f_dir##f_name#"
output="Title,#attributes.title#" addnewline="Yes">

首先使用WRITE的代码没有失败,这导致了我的问题: 在coldfusion 11中创建一个带有action =“APPEND”和action =“WRITE”的文件是否有区别?

1 个答案:

答案 0 :(得分:2)

罗恩 - 写是&#34;创建&#34; - 它创建一个新文件。 Append用于将数据添加到磁盘上的现有文件。它们是不同的行为。

尝试按如下方式修改代码:

<cflock name="#f_name#">
<cfif NOT fileexists(f_dir & f_name)>
  ... do your WRITE action>
</cfif>
</cflock>

<cflock name="#f_name#">
.... do your APPEND action  - you can be sure your file exists at this point.
</cflock>

注意,我通常使用命名锁来序列化这两个动作。有时您的代码会因文件句柄而未完全释放。不典型,但如果您的磁盘发生颠簸,可能会发生这种情况。