2012-07-27 65 views
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()這樣的東西,不應該在那裏?在文檔中找不到像這樣的內容。

任何想法/提示?我在我的調查中對我的blog進行了更深入的研究。這裏太羅嗦了。

+0

亞當,你可以使用的文件處理程序返回的關鍵之一,以測試它是否是 「真正的」。也許像if(file.size> 0){//做你的事}?我的感覺是,如果file.size返回一個正值,它可能是一個真正的文件。也許這對你的需求太基本了?只是一個想法! – 2012-07-27 17:18:52

+1

我很想看到CF中會出現isFile()方法。如果他們有isImageFile和isPDFFile,我們當然可以有isFile :)! – 2012-07-27 17:20:07

+1

我不認爲你正在尋找的選項存在。雖然我同意應該有* *。在java中遇到類似的問題,就是如何在'finally'子句中關閉文件流而不添加醜陋的try/catch。 Apache的方法是創建一個[closeQuietly](http://commons.apache.org/io/api-release/org/apache/commons/io/IOUtils.html#closeQuietly%28java.io.InputStream%29)方法。我比「IsFile」方法更適合那種想法。至少在這個*特定*場景中。 – Leigh 2012-07-27 17:31:19

回答

0

我把這個標記爲答案:基本上沒有原生的方式。我已經raised a ticket with Adobe得到它排序。

感謝您的所有反饋。

更新:根據這個票我提出,這已經ColdFusion的11

1

有趣的問題,實現爲isFileObject()。我會使用java.io.File類。這是CF爲其文件操作內部使用的內容,除了新的vfs功能外。

利用java不應該被認爲是hacky。這是一個向下的權利有時;-)

+0

其實我相信它使用'RandomAccessFile'。同意,在需要時使用java沒有任何問題。我懷疑這個「hacky」的評論是關於本地函數的差距,而不是迴避一般的java;)上面的場景對於基本的文件處理來說是非常典型的。因此,雖然可以使用java,但如果CF將提供本機文件處理函數,它實際上應該提供一種方法來處理* complete *循環 - 本地。僅僅是我的0.02美元.. – Leigh 2012-08-09 20:51:25

+0

不使用cf的內置方法的缺點之一是,它使用反射來調用cf的java方法會花費一些額外的費用。 – 2012-08-10 07:43:09

0

我擴大了現有的TypeOf()UDF的功能,以添加支持返回任何變量類型。您可以使用它來確定變量是否鍵入「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(); 
} 
+0

充分披露:您的github acct – Drew 2016-01-06 16:06:06

相關問題