我正在使用第三方库将文档转换为PDF。输出文件名将是任意的 - 由客户端提供。如果已存在具有该名称的文件,我的代码将以类似于MS Windows的方式修改文件名,例如“myname.txt”变为“myname(1).txt”。我想以某种方式保留输出文件名,以便我的代码不仅是线程安全的,而且还是“进程安全”,这意味着在我的代码确定了它想要的唯一文件名后,另一个应用程序的进程将不会创建该文件使用但在实际创建文件之前。
通常或简单的方法似乎是在编写文件时使用异常处理和循环结构,以便在先前的写入尝试失败时创建唯一的文件名,因为已存在具有该名称的文件。但是,由于编写文件的第三方实现无疑具有副作用,我不想在循环中多次出现,我想找到一种方法来保证文件名在第一次可用时可用调用第三方代码来写文件。
有办法做到这一点吗?
答案 0 :(得分:1)
将PDF写入保证不会被采取的临时文件(例如使用Guid.NewGuid()
)。然后,将文件重命名为所需的文件名。这个重命名是原子的。如果失败,您可以决定该怎么做。 PDF组件只需要调用一次。重命名可以多次执行,可能使用不同的目标名称。