服务器是Windows。
我正在尝试做的是创建一个批处理,它将运行一个程序,输出到临时文件,然后我将读取。我能够创建这个批处理,据我所知,一切正常,直到我回到使用cffile来读取'已更改'文件...在这种情况下,似乎没有任何改变。但是,如果我真的通过windows或ftp explorer打开文件,我可以看到它已被更改。
请参阅下面的示例代码:
<cfset path = "D:/tests/" />
<cfset tempfile_ = GetTempFile(path, "test_")>
<cfset tempfile_batch = getTempFile(path, "testBatch_")>
<cffile action="rename"
destination="#replaceNocase(tempfile_batch, '.tmp', '.bat')#"
source="#tempfile_batch#" />
<cfset tempfile_batch = replaceNocase(tempfile_batch, '.tmp', '.bat') />
<cfset batchContents = '' />
<cfsavecontent variable="batchContents">
@echo off
<cfoutput>
echo "this is a test" > "#tempfile_#"
</cfoutput>
exit
</cfsaveContent>
<cffile
action="write"
file="#tempfile_#"
output='init text' />
<cffile
action="write"
file="#tempfile_batch#"
output='#batchContents#' />
<cfexecute name="#tempfile_batch#" />
<cffile action="read" file="#tempfile_#" variable="foo">
<cfoutput>
fileName: #tempfile_# <br />
result is...
#foo#
</cfoutput>
当我实际打开临时文件时,内容是“这是一个测试”,而#foo#是“初始文本”
任何想法为什么?
答案 0 :(得分:1)
默认情况下,cfexecute
会触发进程,但不会等待它完成。因此,您可能会在更新之前尝试读取该文件。在timeout
电话中添加cfexecute
即可解决问题。
超时 - ColdFusion等待衍生程序输出的时间长度(以秒为单位)。
- 0(默认值):相当于非阻塞模式。
- 非常高的价值: 相当于阻止模式。