Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不存在的文件夹中自动创建文件?_C#_File_Directory_Atomic - Fatal编程技术网

C# 如何在不存在的文件夹中自动创建文件?

C# 如何在不存在的文件夹中自动创建文件?,c#,file,directory,atomic,C#,File,Directory,Atomic,给定一个文件的路径,我想创建这个文件,如果不存在指向它的目录字符串;但是我不希望我的程序的任何其他实例能够看到没有文件的基本目录 基本上,我希望立即以原子方式创建所需的目录和文件。据我所知,它必须分两步完成(创建目录,创建文件),所以我考虑使用锁文件,但同样的问题也适用于:我在哪里创建锁文件?我不知道需要创建多少级别的文件夹,在路径的某个点上,我可能会失去写入权限,因此没有用于锁定文件的“安全位置” 然后我考虑使用一个锁目录而不是锁文件,但是我找不到任何“测试并设置”方法来创建目录(direct

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

基本上,我希望立即以原子方式创建所需的目录和文件。据我所知,它必须分两步完成(创建目录,创建文件),所以我考虑使用锁文件,但同样的问题也适用于:我在哪里创建锁文件?我不知道需要创建多少级别的文件夹,在路径的某个点上,我可能会失去写入权限,因此没有用于锁定文件的“安全位置”

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


那么,正确的方法是什么呢?

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


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

您可以使用互斥类,它允许您同步进程间

在所有进程的伪代码中

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

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

这取决于要创建文件夹+文件的其他内容。这是你的应用程序吗?使用系统范围的互斥锁/其他IPC。您可以查看NTFS API,它是事务性的,尽管您可能需要为它P/Invoke使用临时文件有什么问题?随机文件名。任何其他应用程序都不太可能知道它。嗯,除非有几台计算机可以访问共享上的目录。。。但我在问题中没有具体说明。