2011-04-02 83 views
12

我不确定通常是什么人通过“锁定”一个文件的意思,但我想要的是做一个文件,当我试图打开它会产生一个“指定的文件正在使用”错误信息的文件与其他应用程序。如何用C#锁定文件?

我想这样做来测试我的应用程序,看看它在我尝试打开处于此状态的文件时的行为。我尝试这样做:

FileStream fs = null; 

private void lockToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    fs = new FileStream(@"C:\Users\Juan Luis\Desktop\corte.txt", FileMode.Open); 
} 

private void unlockToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    fs.Close(); 
} 

但显然它并没有做什么,我预料之中,因为我能够打开该文件,用记事本,而这是“锁定”。那么如何锁定一个文件,使其不能用另一个应用程序打开以用于我的测试目的呢?

回答

22

您需要的None一个FileShare枚举值传递给上FileStream constructor overloads打开:

fs = new FileStream(@"C:\Users\Juan Luis\Desktop\corte.txt", FileMode.Open, 
    FileAccess.ReadWrite, FileShare.None); 
+14

希望我有时可以同时接受的答案,因为它们几乎完全一样。希望你不介意我因为他的低分而接受其他人:) – Juan 2011-04-02 09:23:33

1

虽然FileShare.None无疑是一个快速简便的解决方案锁定整个文件,你可以锁定文件的一部分使用FileStream.Lock()

public virtual void Lock(
    long position, 
    long length 
) 

Parameters 

position 
    Type: System.Int64 
    The beginning of the range to lock. The value of this parameter must be equal to or greater than zero (0). 

length 
    Type: System.Int64 
    The range to be locked. 

,相反,你可以使用以下方法来解锁文件:FileStream.Unlock()

public virtual void Unlock(
    long position, 
    long length 
) 

Parameters 

position 
    Type: System.Int64 
    The beginning of the range to unlock. 

length 
    Type: System.Int64 
    The range to be unlocked.