gpt4 book ai didi

c# - 如何防止或拦截对 Directory.Delete(path, true) 的调用

转载 作者:行者123 更新时间:2023-11-30 12:32:29 26 4
gpt4 key购买 nike

最近我在调试一个“poof-all-customer-data-is-gone”问题。很快就发现错误的分支导致了 Directory.Delete(customerRoot, true) 代码行。灾难性的行是由普通的 GUI 开发人员编写的。能导致这种灾难的线路不多。所以我的问题是如何防止这个特定的调用。 (DirectoryInfo.Delete() 是第二个)。

这是我列出的可能解决方案的优先列表

  • 没有第三方更改构建过程的编译错误
  • 无需第三方的运行时拦截
  • 与第三方进行运行时拦截(不改变构建过程)
  • 第三方编译错误(我猜 PostSharp 会做)
  • 为 GUI 开发人员举办的关于客户如何喜爱他们的数据的教育研讨会

还有其他想法吗?

我会提到我们的系统有一个专门的文件/文件夹删除服务(验证和记录)。

最佳答案

要在运行时“拦截”调用,您可以使用 FileSystemWatcher类,但它实际上不会阻止删除,只是让你知道它发生了。防止实际删除要棘手得多。 Windows 不提供 Linux 的 ptrace 功能,因此您无法拦截系统调用本身(有一篇关于此的文章 here 但据我所知,可用性相当有限)。其他人的建议 - 设置访问权限和信任级别 - 可能会奏效,但是当你确实需要删除某些东西并且你的“删除服务”只是 .NET 方法的包装器时,你也会阻止它起作用。

另一种选择是使用第三方工具并在编译时进行检查 - this question有您需要的东西,包括示例,还有更多工具可以做到这一点(我只使用 Resharper,但我想它也可以完成任务)。

但是,我认为这不是重点。你的开发人员犯了一个错误,它破坏了一些客户数据,没有人对此感到高兴。这并不意味着您需要制定系统范围的规则并执行该规则,这意味着开发人员应该更好地测试他或她的代码和/或应该使用您提到的删除服务(无论是什么)。无论你多么努力,你都无法阻止人们做傻事。您不想花费时间和金钱围绕 Directory.Delete() 方法进行防御,只是为了发现其他人犯了一个不同的愚蠢错误,而这个特定的事情永远不会再成为问题。除非像这样的问题(滥用 Directory.Delete() )在您的系统中比平时更容易发生,否则请放手,专注于其他事情。

关于c# - 如何防止或拦截对 Directory.Delete(path, true) 的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11277559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com