说我有这段代码:
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的调查进行了更深入的研究。这里太浪费了。
答案 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();
}