Почему второй процесс не может прочитать файл, который позволяет читать через FileShare.Read?C#

Место общения программистов C#
Ответить
Anonymous
 Почему второй процесс не может прочитать файл, который позволяет читать через FileShare.Read?

Сообщение Anonymous »

Ожидается, что следующий код будет работать как Excel и информировать пользователя о том, что он может получить доступ к электронной таблице только в режиме только для чтения:
  • Первый процесс открывает файл и получает доступ на запись. Информация о пользователе сохраняется в файле .lock.
  • Любой другой процесс может только читать эту информацию. Он считывает информацию о пользователе из файла .lock, чтобы пользователь мог, например. обсудите с человеком, имеющим доступ к файлу.
Для воспроизведения запустите программу 2 раза, экземпляр 1 можно запустить без отладки. Запустите второй экземпляр с подключенным отладчиком, чтобы увидеть исключение IOException.

Код: Выделить всё

using System;
using System.IO;
using System.Text;

namespace SingleUser
{
internal class Program
{
static void Main(string[] args)
{
string lockFileName = ".lock";

// Make sure that CreateNew can be used in the next step
try
{
File.Delete(lockFileName);
}
catch (IOException) { }

try
{
// First process enters here and gets access
using (var lockfile = File.Open(lockFileName, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read))
{
using (var writer = new StreamWriter(lockfile, Encoding.UTF8, 256, true))
{
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
writer.WriteLine(userName);
writer.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}

// IOException: The segment is already unlocked
// lockfile.Unlock(0,lockfile.Length);

Console.WriteLine("You can access the data. Press Enter to stop working with the file.");
Console.ReadLine();
}
}
catch (IOException e)
{
// Second process enters here and gets info about the user who is working with the data
using (var infofile = File.Open(lockFileName, FileMode.Open, FileAccess.Read)) // 

Подробнее здесь: [url]https://stackoverflow.com/questions/79180948/why-cant-a-second-process-read-the-file-which-allows-reading-via-fileshare-read[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»