C#如何锁定文件

时间:2011-02-09 23:05:31

标签: c# file locking

我们正在使用一个读取文件并插入数据库的应用程序。出于某种原因,我们将创建时间设置为特定时间。当我们创建文件时,应用程序会在我们更改创建时间之前选择文件。无论如何我们可以锁定文件,直到我们改变它的创建时间。

我得到的错误是在File.SetCreationTime,因为该文件正被其他进程使用或文件已存档。

//Copy signal file
s = filePath + "s";
newS = targetFullPath2 + "s";
File.Copy(s, newS, true);
//
//new creation ts
dtFileCreation = File.GetCreationTime(s);
//retain creation time
File.SetCreationTime(newS, dtFileCreation);

请建议。

2 个答案:

答案 0 :(得分:4)

通常的解决方案是首先在不同的目录中或以不同的名称创建文件(并设置其时间戳),然后在准备好时将其移动或重命名,以便其他进程可以获取它。移动/重命名是NTFS上的原子操作(除非你在不同的分区之间移动文件)。

例如:

s = filePath + "s";
newS = targetFullPath2 + "s";
File.Copy(s, newS + "_", true);    // add the _ so the other process
                                   // doesn’t “see” the file yet

dtFileCreation = File.GetCreationTime(s);
File.SetCreationTime(newS + "_", dtFileCreation);

// We’re done with the file, now rename it to its intended final name
File.Move(newS + "_", newS);

答案 1 :(得分:1)

该错误表示有人(可能是您或其他程序)正在锁定文件;因此,我认为锁定文件不会解决您的问题。它是什么类型的文件?您的代码是否正在读取文件而忘记在完成后关闭流?