4

ファイルパスを受け入れる関数があります。ユーザーは、ファイルへの絶対パスまたは相対パスを渡すことができます。相対パスが指定されている場合、ExpandPath関数は次のように絶対パスに変換できます。

<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

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

4

2 に答える 2

7

これを行うより柔軟な方法は、未加工の入力からのディレクトリが存在するかどうかを確認し、存在しない場合は expandpath を試すことです。このようなもの:

<cfif directoryExists(myFileLocation)>
  <cfset theDirectory=myFileLocation)>
<cfelseif directoryExists(expandPath(myFileLocation))>
  <cfset theDirectory=expandPath(myFileLocation)>
<cfelse>
  <cfthrow message="Invalid directory!">
</cfif>
于 2012-05-04T15:37:03.407 に答える
3

文字列をテストして、Windows の場合は C:\、UNIX の場合は \\ で始まるかどうかを確認し、それを if? これはあなたのウィンドウチェックかもしれません:

<cfif reFindNoCase("[a-zA-Z]:\\",myFileLocation)>
   <!--- Is a absolute path --->
<cfelse>
   <!--- Is not an absolute path --->
</cfif>
于 2012-05-04T09:30:30.847 に答える