Подтвердить что ты не робот

Как заблокировать файл с помощью С#?

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

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

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

Но, по-видимому, он не делал то, что я ожидал, потому что я смог открыть файл с помощью Notepad, пока он был "заблокирован". Итак, как я могу заблокировать файл, чтобы он не мог быть открыт другим приложением для тестирования?

4b9b3361

Ответ 2

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

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

Ответ 3

Хотя 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.