这是我的代码:
<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>
有什么想法吗?
SOLUTION:
我的OR语句必须为AND,谢谢Miguel-F,并且通过Busches的改进,这是最终结果:
<cfif (CFFILE.FileSize GT (4194304))>
Delete File
<cfelseif NOT ListFindNoCase("jpg,jpeg,png", CFFILE.serverFileExt)>
Delete File
<cfelse>
It's ok
</cfif>
谢谢你们!
您的代码在语法上是正确的,但是逻辑上有缺陷。该条件将始终为真,因为您正在使用OR
。条件之一为真时,条件通过。尝试改为使用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答案以了解一种可以稍微压缩代码的方式。
正如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
更加简洁,易于阅读和维护。
我认为您代码中的问题仅仅是在语句中使用“ OR”。如果我正确阅读了您的示例,则每次都会删除该文件。
我相信这会达到您想要的效果。
<cfelseif ( ( CFFILE.serverFileExt neq "png" )
AND ( CFFILE.serverFileExt neq "jpg" )
AND ( CFFILE.serverFileExt neq "jpeg" ) ) >
您不是要寻找一种可能被删除的文件满足任何条件的[[one(即“ OR”的功能)的情况,因为任何文件扩展名都将不等于您3个文件中的至少2个选项。
相反,您正在寻找一种可能被删除的文件满足all
条件的情况(这是“ AND”的作用。