2

これは私のコードです:

<cfif (CFFILE.FileSize GT (4194304))>
Delete File
<cfelseif CFFILE.serverFileExt neq "png"  >
Delete File
<cfelse>
It's ok
</cfif>

許可されているファイルタイプとして「jpg」と「jpeg」を追加したい。私は試しましたが、これは成功しませんでした。

<cfif (CFFILE.FileSize GT (4194304))>
Delete File
<cfelseif ( ( CFFILE.serverFileExt neq "png" ) OR ( CFFILE.serverFileExt neq "jpg" ) OR ( CFFILE.serverFileExt neq "jpeg" ) ) >
Delete File
<cfelse>
It's ok
</cfif>

何か案は?

解決:

私のORステートメントはANDである必要があります。ありがとう、Miguel-Fです。ブッシュの改善により、これが最終結果になります。

<cfif (CFFILE.FileSize GT (4194304))>
    Delete File
<cfelseif NOT ListFindNoCase("jpg,jpeg,png", CFFILE.serverFileExt)>
    Delete File
<cfelse>
    It's ok
</cfif>

みんなありがとう!

4

3 に答える 3

9

Miguel-Fが述べたように、あなたの問題はあなたがANDの代わりに使う必要があるということですOR。また、このような場合は、複数のステートメントを使用ListFindNoCase()する代わりに、使用に切り替えることをお勧めします。OR/AND

<cfif CFFILE.FileSize GT 4194304> <!--- You also don't need all those () here --->
    Delete File
<cfelseif NOT ListFindNoCase( "png,jpg,jpeg", cffile.ServerFileExt )>
    Delete File
<cfelse>
    It's ok
</cfif>

ListFindNoCaseはるかに簡潔で、読みやすく、保守も簡単です。

于 2013-03-14T15:55:37.470 に答える
3

コードは構文的に正しいですが、ロジックに欠陥があります。を使用しているため、その条件は常に真になりますOR。条件の 1 つが true になるとすぐに、条件が通過します。AND代わりに、次のように使用してみてください。

<cfif (CFFILE.FileSize GT (4194304))>
    Delete File
<cfelseif (CFFILE.serverFileExt NEQ "png") AND (CFFILE.serverFileExt NEQ "jpg") AND (CFFILE.serverFileExt NEQ "jpeg")>
    Delete File
<cfelse>
    It's ok
</cfif>

ColdFusion ListFindNoCase()関数を使用する場合にコードを少し圧縮する方法については、Busches の回答を参照してください。

于 2013-03-14T15:42:32.280 に答える
2

コードの問題は、ステートメントでの「OR」の使用にあると思います。サンプルを正しく読めば、毎回ファイルが削除されます。

これはあなたが探している効果があると思います。

<cfelseif ( ( CFFILE.serverFileExt neq "png" ) 
       AND ( CFFILE.serverFileExt neq "jpg" ) 
       AND ( CFFILE.serverFileExt neq "jpeg" ) ) >

ファイル拡張子は3つのオプションのうち少なくとも2つと等しくないため、削除される可能性のあるファイルがいずれの条件(「OR」が行う条件)を満たしている状況を探しているわけではありません。

むしろ、削除される可能性のあるファイルがすべての条件を満たしている状況を探しています(これが「AND」の機能です)。

于 2013-03-14T15:48:03.297 に答える