2

私がこのコードを持っているとしましょう:

function doFileStuff(){
    var file = "";
    try {
        file = fileOpen(filePath);
        // do stuff with file
    }
    finally {
        fileClose(file);
    }
}

fileOpen()プロセスが失敗した場合、呼び出しfileClose()はエラーになります。私がする必要があるのは、この種のこと(擬似コード)です:

if (isFile(file)){
    fileClose(file);
}

fileファイルが空の文字列であるかどうかをテストできることはわかっています。これはここでは機能しますが、テストする必要があるもの、つまりファイルハンドルかどうかはテストしていません。オブジェクトのJavaクラスを確認することはできますが、これも少しハッキーに聞こえます。CFMLでそれを行う方法があるはずです。

ただisFile()のようなものがあるはずですよね?ドキュメントでこのようなものを見つけることができません。

何か考え/ヒントはありますか?私は自分のブログで調査をさらに深く掘り下げました。ここでは言葉が多すぎます。

4

3 に答える 3

1

興味深い問題。私はそのjava.io.Fileクラスを使います。これは、新しいvfs機能を除いて、CFがファイル操作のために内部的に使用するものです。

Javaを活用することは、ハッキーと見なされるべきではありません。それは時々必要です;-)

于 2012-08-09T14:47:11.827 に答える
0

私はこれを回答済みとしてマークしています。基本的に、それを行うネイティブな方法はありません。私はそれを分類するためにアドビと一緒にチケットを調達しました。

すべてのフィードバックをありがとう。

更新:私が作成したチケットによると、これはisFileObject()ColdFusion11と同様に実装されています。

于 2012-07-31T10:27:04.840 に答える
0

既存のTypeOf()UDFの機能を拡張して、任意の変数タイプを返すサポートを追加しました。これを使用して、変数のタイプが「FileHandler」(または「FileHandlerJava」)であるかどうかを判別し、それに応じて閉じることができます。これはColdFusion9以降で動作します。CF11にアップグレードしていないため、このソリューションを投稿します。

TypeOf()UDF(およびサンプルの使用法)

https://gist.github.com/JamoCA/1ed396431dfb8e0e9f58

 /* Detect CF's fileOpen() */
if (typeOf(theFile) is "fileHandler"){
    fileClose(file);

/* Detect createobject("java","java.io.FileReader") */
else if (typeOf(theFile) is "fileHandlerJava"){
    variables['file'].close();
}
于 2016-01-06T15:57:54.127 に答える