Как открыть файл более одного раза одновременно - PullRequest
1 голос
/ 10 ноября 2019

Я пытаюсь открыть файл для доступа для чтения / записи, а затем открыть его снова, только для доступа только для чтения, но у меня постоянно появляется сообщение о том, что во второй раз невозможно получить доступ к файлу, поскольку он используется другимпроцесс (первый).

// Open a file for read/write and then only for read without closing the firts stream

string FileName = "C:\\MisObras\\CANCHA.REC"; // Replace this with any existing folder\file 
FileStream File1 = null,
        File2 = null;
try
{
    File1 = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
    MessageBox.Show("File1 is Open for Read/Write", "", MessageBoxButtons.OK, MessageBoxIcon.Information);

    File2 = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read);
    MessageBox.Show("File2 is Open for Read", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
} catch (Exception e)
{
    System.Windows.Forms.MessageBox.Show (e.Message,"Error de Archivo", System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Error);
}

if (File1 != null) File1.Close();
if (File2 != null) File2.Close();

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

1 Ответ

1 голос
/ 10 ноября 2019

Сравните режимы доступа с режимами общего доступа.

Файл1 открыт FileAccess.ReadWrite и FileShare.Read - он работает так, как я полагаю, вы намерены.

Файл2 открыт FileAccess.Readи FileShare.Read. Тем не менее, File1 имеет открытый FileAccess.ReadWrite. Открытие только разрешает чтение, таким образом, это терпит неудачу.

Ваше второе открытие нуждается в FileShare.ReadWrite, чтобы работать правильно. Остерегайтесь вопросов кеширования здесь.

...