我怎么知道这个变量是否是一个文件句柄?

时间:2012-07-27 16:57:37

标签: coldfusion

说我有这段代码:

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()这样的东西,不应该吗?我在文档中找不到这样的内容。

有任何想法/提示吗?我对blog的调查进行了更深入的研究。这里太浪费了。

3 个答案:

答案 0 :(得分:1)

有趣的问题。我会使用java.io.File类。这是CF在内部用于文件操作的内容,但新的vfs功能除外。

利用java不应该被认为是hacky。有时这是一种非常正确的必需品; - )

答案 1 :(得分:0)

我将此标记为已回答:基本上没有本地方式可以做到这一点。我raised a ticket with Adobe对它进行了排序。

感谢所有反馈。

更新:根据我提出的那张票,这个已在ColdFusion 11中实现为isFileObject()

答案 2 :(得分:0)

我扩展了现有TypeOf()UDF的功能,以添加支持以返回任何变量类型。您可以使用它来确定变量是否为type" FileHandler" (或" FileHandlerJava")然后相应地关闭它。它适用于ColdFusion 9+。我发布此解决方案是因为我们没有升级到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();
}