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は、プロセスを起動しますが、終了するまで待機しません。そのため、ファイルが更新される前にファイルを読み取ろうとしている可能性があります。呼び出し に atimeoutを追加すると、問題が解決するはずです。cfexecute

timeout - ColdFusion が生成されたプログラムからの出力を待機する時間の長さ (秒単位)。

  • 0 (デフォルト): ノンブロッキング モードと同等。
  • 非常に高い値: ブロッキング モードと同等です。
于 2013-06-26T14:48:23.947 に答える