2012-05-04 15 views
4

ファイルパスを受け入れる関数があります。ユーザーはファイルへの絶対パスまたは相対パスのいずれかを渡すことができます。 ..ファイルパスがColdFusionで絶対パスか相対パスかを調べる方法

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

を、それが返さ:相対パスが提供されている場合、ExpandPath関数はそうように、絶対パスに変換することができ

た:

C:\www\example\data\test 

しかし、ユーザは次のように絶対パスを提供する場合

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

...それが返されます。

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

どうすればこの問題を解決できますか?

答えて

3

文字列をテストして、ウィンドウの場合はC:\で始まり、UNIXの場合は\\で始まるかどうかを確認し、ifとして使用できますか? これはあなたの窓には、チェックすることができます

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

reFindNoCaseを実行している場合、正規表現で両方のケースを指定する必要はありません!また、Windows上でCFに 'C:/'を付けることは完全に有効です。こうすれば '[a-z]:[\\ /]'を使いたいでしょう。 (私はAlの方法を使う傾向があるが) –

7

Aこれを行うには、おそらくもっと柔軟な方法は、生の入力からのディレクトリが存在するかどうかをチェックし、そうでない場合は、expandpathを試してみることです。このようなもの:

<cfif directoryExists(myFileLocation)> 
    <cfset theDirectory=myFileLocation)> 
<cfelseif directoryExists(expandPath(myFileLocation))> 
    <cfset theDirectory=expandPath(myFileLocation)> 
<cfelse> 
    <cfthrow message="Invalid directory!"> 
</cfif> 
関連する問題