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,并且随着 Busches 的改进,这是最终结果:

<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. 只要其中一个条件为真,条件就会通过。尝试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" ) ) >

您不是在寻找可能被删除的文件满足任何一个条件(这是“OR”所做的)的情况,因为任何文件扩展名将不等于您的 3 个选项中的至少 2 个。

相反,您正在寻找一种情况,其中可能删除的文件满足所有条件(这就是“AND”所做的。

于 2013-03-14T15:48:03.297 回答