Как заблокировать файл с C #? - PullRequest
18 голосов
/ 02 апреля 2011

Я не уверен, что люди обычно подразумевают под «блокировкой» файла, но я хочу сделать это для файла, который при попытке открыть сообщение об ошибке «Указанный файл используется» это с другим приложением.

Я хочу сделать это, чтобы проверить мое приложение, чтобы увидеть, как оно ведет себя, когда я пытаюсь открыть файл, который находится в этом состоянии. Я попробовал это:

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();
}

Но, видимо, он не сделал то, что я ожидал, потому что я смог открыть файл с помощью Блокнота, пока он был «заблокирован». Так как же заблокировать файл, чтобы его нельзя было открыть другим приложением в целях тестирования?

Ответы [ 3 ]

37 голосов
/ 02 апреля 2011

Вам необходимо передать значение перечисления FileShare, равное None, чтобы открыть при перегрузках конструктора FileStream :

fs = new FileStream(@"C:\Users\Juan Luis\Desktop\corte.txt", FileMode.Open, 
    FileAccess.ReadWrite, FileShare.None);
34 голосов
/ 02 апреля 2011

Согласно http://msdn.microsoft.com/en-us/library/system.io.fileshare(v=vs.71).aspx

FileStream s2 = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.None);
5 голосов
/ 27 июля 2015

Хотя 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. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...