1

服务器是windows。

我要做的是创建一个批处理,该批处理将运行一个程序,该程序输出到一个临时文件,然后我将读取该文件。我能够创建这个批处理,据我所知,一切正常,直到我回到使用 cffile 来读取“更改”文件......在这种情况下,它似乎没有任何改变。但是,如果我要通过 windows 或 ftp 资源管理器实际打开文件,我可以看到它已被更改。

请参阅下面的示例代码:

<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# 是“初始化文本”

知道为什么吗?

4

1 回答 1

2

默认情况下,cfexecute触发进程,但不等待它完成。因此,您可能会在文件更新之前尝试读取文件。timeout在您的通话中添加一个cfexecute,它应该可以解决问题。

timeout - ColdFusion 等待衍生程序输出的时间长度,以秒为单位。

  • 0(默认):相当于非阻塞模式。
  • 一个非常高的值:相当于阻塞模式。
于 2013-06-26T14:48:23.947 回答