如何以原子方式在不存在的文件夹中创建文件?

时间:2012-08-21 13:59:03

标签: c# file directory atomic

给定文件的路径,我想创建这个文件,如果它们不存在,则创建通向它的目录字符串;但我不希望我的程序的任何其他实例能够在没有文件的情况下看到基本目录。

基本上,我想立即以原子方式创建所需的目录和文件。根据我的理解,它必须分两步完成(创建目录,创建文件),所以我在考虑使用锁文件,但同样的问题适用:我在哪里创建锁文件?我不知道需要创建多少级别的文件夹,并且在某些方面,我可能会放弃写入权限,因此锁定文件没有“安全的地方”。

然后我考虑使用锁定目录而不是锁定文件,但我找不到任何“测试和设置”方法来创建目录(Directory.CreateDirectory(path)不告诉你它是否做了什么)。

那么正确的方法是什么?

2 个答案:

答案 0 :(得分:5)

在临时名称下创建目录和文件,并以原子方式将目录重命名为最终名称。

或使用事务性NTFS(更难)。

答案 1 :(得分:1)

您可以使用允许您同步进程间的Mutex类。

http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx

所有进程的伪代码

grab the mutex
try
 check or create directory and file
finally
release the mutex 

这适用于在同一台PC上运行的本地程序实例。未指定,但对于使用相同数据库的网络中的程序实例,您可以在数据库中实现类似互斥锁的功能。