没有办法在普通文件系统上以事务方式删除多个文件(您可能能够找到它所在的深奥文件系统,但即使这样我怀疑这对您有帮助。显然您当前的文件系统甚至不允许您删除正在删除的文件阅读,所以大概你被你所拥有的东西所困扰!)。
也许您可以在数据库中保存的不是文件内容,而是文件系统中“真正存在”的文件名列表。有关需要一致性的任何内容,请参阅该列表。如果文件删除失败,您可以将文件标记为“不存在”并要求将来尝试删除,然后在合理的情况下重试(可能是偶尔的维护工作,可能是帮助进程重试每次失败并以指数退避到极限)。
为此,(a)您的网络服务器必须在提供文件之前引用数据库,或者(b)在文件删除失败后有一段无限期必须是可以的,在此期间它仍然可以被提供. 当然还有一个“自然竞争条件”,即在删除尝试之前开始提供服务的文件,即使在事务完成后也会完成下载。
[编辑:啊,我突然想到“我将所有文件都放在主要实体的文件夹中”实际上可能真的很有帮助。在您的事务中,重命名目录。至少从它们的旧名称中原子地“删除”所有文件,如果任何文件正在使用中,它将失败(在禁止此类事情的文件系统上)。如果重命名成功,并且没有其他人知道新名称,那么他们将不会访问这些文件,您应该可以毫无问题地删除它们。我认为。当然,如果您遇到无法删除文件的其他原因,这将不起作用,因为您可能可以重命名文件夹但无法删除文件。]