Coldfusion 将CFTRY标记环绕所有内容

Coldfusion 将CFTRY标记环绕所有内容,coldfusion,error-handling,coldfusion-8,Coldfusion,Error Handling,Coldfusion 8,我们有一个系统,允许用户上传一个文件,我们循环浏览该文件,然后生成另一个文件。上载文件的用户是已登录的用户 问题是这些文件包含敏感数据,所以我们必须删除它们。您可以想象,有几个地方可以向文件写入更多信息并读取文件。有时此页面上会发生错误(通常与CFFILE有关) 所以我的问题是,把所有的代码(不管怎么说,大部分代码)放在一个巨大的CFTRY中好吗?然后捕获发生的任何异常,然后在CFCATCH中运行另一个CFTRY来删除这两个文件?(阅读更新)我不太担心性能,因为这个过程不是每天执行一百万次,可能

我们有一个系统,允许用户上传一个文件,我们循环浏览该文件,然后生成另一个文件。上载文件的用户是已登录的用户

问题是这些文件包含敏感数据,所以我们必须删除它们。您可以想象,有几个地方可以向文件写入更多信息并读取文件。有时此页面上会发生错误(通常与CFFILE有关)

所以我的问题是,把所有的代码(不管怎么说,大部分代码)放在一个巨大的CFTRY中好吗?然后捕获发生的任何异常,然后在CFCATCH中运行另一个CFTRY来删除这两个文件?(阅读更新)我不太担心性能,因为这个过程不是每天执行一百万次,可能是每月执行三次

这是确保删除文件的可接受做法吗


更新我不会删除CFCATCH中的文件。我将首先检查是否存在。然后删除它们。

只要有保证,就可以使用try/catch。如果你尝试了101行代码而不是允许的100行代码,就不会有CFML警察在半夜把你拖走。

然而,正如@Tomalak所说,您的措辞有点暗示代码可以经受一些重构。你说你不能重构代码,但是添加异常处理已经是重构了,所以很明显你可以做到。所以要正确地做。隔离一些功能,并将它们放在单独的模块中(我不是指像
所说的那样,我指的是泛指的术语),可以是UDF、一个或多个CFC中的方法(它们可能是完全不同的,因此可能不适合单个CFC),甚至只包括文件。以后可以更好地重构它们。开发是迭代和循环的,请记住:您不需要在每次进行更改时都做到完美。一方面,“完美”的定义随着需求的变化而变化。但在维护代码时,您应该始终以改进代码为目标。我不认为简单地对整个事情进行一次尝试/捕获就意味着一种改进,更像是“这段代码失去了控制”


我可以建议的另一件事是做出改进,也许将其发布到,并了解其他人的想法。我不知道有多少CFER居住在这个网站上,所以如果你已经在Twitter上发布了标有“ColdFusion”的东西,那么可能会很好。

只要有必要,就可以使用try/catch。如果你尝试了101行代码而不是允许的100行代码,就不会有CFML警察在半夜把你拖走。

然而,正如@Tomalak所说,您的措辞有点暗示代码可以经受一些重构。你说你不能重构代码,但是添加异常处理已经是重构了,所以很明显你可以做到。所以要正确地做。隔离一些功能,并将它们放在单独的模块中(我不是指像
所说的那样,我指的是泛指的术语),可以是UDF、一个或多个CFC中的方法(它们可能是完全不同的,因此可能不适合单个CFC),甚至只包括文件。以后可以更好地重构它们。开发是迭代和循环的,请记住:您不需要在每次进行更改时都做到完美。一方面,“完美”的定义随着需求的变化而变化。但在维护代码时,您应该始终以改进代码为目标。我不认为简单地对整个事情进行一次尝试/捕获就意味着一种改进,更像是“这段代码失去了控制”


我可以建议的另一件事是做出改进,也许将其发布到,并了解其他人的想法。我不知道有多少CFER居住在这个网站上,所以当你这样做的时候,在Twitter上发布标有“ColdFusion”的东西也许是件好事。

我们在文件方面也有类似的情况,并采取了不同的方法

第1步是限制对包含文件的目录的访问

第2步是计划清理。我们有一个每天运行的ColdFusion作业。它检查各种目录并删除任何超过x天的文件。x的值取决于目录


这种方法可能适合您的情况,也可能不适合您的情况。

我们在文件方面也有类似的情况,并采取不同的方法

第1步是限制对包含文件的目录的访问

第2步是计划清理。我们有一个每天运行的ColdFusion作业。它检查各种目录并删除任何超过x天的文件。x的值取决于目录


这种方法可能适合您的情况,也可能不适合您的情况。

对于一个巨大的try/catch块,我想说的唯一一件事是,它会停止try块中的所有处理,因此如果您还有一些事情可以做,那么仅仅因为轨道上有四分之一的部分,就停止整列火车可能是过火了

我有一个类似的处理大量文件的过程,我们将每个过程放在一个单独的try/catch块中,这样它们就不会相互干扰。i、 一个坏掉的第一个文件不会把接下来的3个完美的文件搞砸。catch块只是将错误消息添加到一个字符串中,然后通知用户文件中的错误格式(或其他格式),这些错误格式是错误的,但正确的文件按预期处理

<!--- file one --->
<cftry>
  some stuff
  <cfcatch>
    <cfset errors = errors & "file one did not work because #cfcatch.message#">
  </cfcatch>
</cftry>

<!--- file 2 --->
<cftry>
  some stuff
  <cfcatch>
    <cfset errors = errors & "file two did not work because #cfcatch.message#">
  </cfcatch>
</cftry> 
<cfetc...>

一些东西
一些东西
如果你在一个动态集合上循环,你可以把try/catch块放在循环中,这样try/catch就不会停止循环,其他东西也可以处理。当然,如果文件2依赖于文件1,则这不起作用

<cfloop index = "i" ...>
  <cftry>
    some stuff
    <cfcatch>
      <cfset errors = errors & "file #i# did not work because #cfcatch.message#">
    </cfcatch>
  </cftry>
</cfloop>

一些东西

关于一个巨大的try/catch块,我想说的唯一一件事是,它会停止try块中的所有处理,因此,如果你还有可以做的事情,仅仅因为轨道上有四分之一的东西,就停止整列火车可能是过火了

我有
<cfset NL = CreateObject("java", "java.lang.System").getProperty("line.separator")>