2011-02-09 97 views
2

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

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

请指教。

+0

使用关于码C#锁不列入工作。 – 2011-02-09 23:06:20

+3

“锁定”关键字无关的锁定文件,所以这就是为什么。该功能完全关于线程同步。 – 2011-02-09 23:11:01

回答

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

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