C# C如何锁定文件

C# C如何锁定文件,c#,file,locking,C#,File,Locking,我们使用的应用程序读取文件并插入数据库。出于某种原因,我们将创建时间设置为特定时间。当我们创建文件时,应用程序会在我们更改创建时间之前拾取文件。我们是否可以锁定文件,直到更改其创建时间 我遇到的错误是File.SetCreationTime,因为其他进程正在使用该文件或该文件已存档 //Copy signal file s = filePath + "s"; newS = targetFullPath2 + "s"; File.Copy(s, newS, true); // //new crea

我们使用的应用程序读取文件并插入数据库。出于某种原因,我们将创建时间设置为特定时间。当我们创建文件时,应用程序会在我们更改创建时间之前拾取文件。我们是否可以锁定文件,直到更改其创建时间

我遇到的错误是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);

请注意。

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

常见的解决方案是先创建文件并将其时间戳设置在不同的目录中或不同的名称下,然后在文件准备就绪时移动或重命名它,以便其他进程可以拾取它。移动/重命名是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);

在代码上使用C锁不起作用。“lock”关键字与锁定文件无关,这就是为什么。这个功能是关于线程同步的。非常感谢。你救了我一天。