2012-05-04 98 views
4

我有一個接受文件路徑的函數。用戶可以將絕對路徑或相對路徑傳遞給文件。如果提供了一個相對路徑,則ExpandPath功能,可以將其轉換爲絕對路徑,像這樣:如何在ColdFusion中確定文件路徑是絕對還是相對的

<cfset filepath = ExpandPath("data/test.txt") > 

..它返回:

C:\www\example\data\test 

但是,如果用戶提供了像絕對路徑:

<cfset filepath = ExpandPath("C:\www\example\data\test") > 

..它返回:

C:\www\example\C:\www\example\data\test 

我該如何解決這個問題?

回答

3

你可以測試這個字符串,看看它是以C:\開頭的windows還是\\爲unix,並用它作爲if? 這可能是你的窗口查詢:

<cfif reFindNoCase("[a-zA-Z]:\\",myFileLocation)> 
    <!--- Is a absolute path ---> 
<cfelse> 
    <!--- Is not an absolute path ---> 
</cfif> 
+1

如果你正在做reFindNoCase,你不需要在正則表達式中指定兩種情況!另外,在Windows上使用'C:/'提供CF是完全有效的。所以你要用'[a-z]:[\\ /]'這樣做。 (儘管我更傾向於使用Al的方法。) –

7

一個可能更靈活的方式做,這是檢查是否從原料輸入的目錄是否存在,如果沒有,嘗試expandpath。就像這樣:

<cfif directoryExists(myFileLocation)> 
    <cfset theDirectory=myFileLocation)> 
<cfelseif directoryExists(expandPath(myFileLocation))> 
    <cfset theDirectory=expandPath(myFileLocation)> 
<cfelse> 
    <cfthrow message="Invalid directory!"> 
</cfif> 
相關問題