Ожидается, что следующий код будет работать как 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]
Ожидается, что следующий код будет работать как Excel и информировать пользователя о том, что он может получить доступ к электронной таблице только в режиме только для чтения: [list] [*]Первый процесс открывает файл и получает доступ на запись. Информация о пользователе сохраняется в файле .lock. [*]Любой другой процесс может только читать эту информацию. Он считывает информацию о пользователе из файла .lock, чтобы пользователь мог, например. обсудите с человеком, имеющим доступ к файлу. [/list] Для воспроизведения запустите программу 2 раза, экземпляр 1 можно запустить без отладки. Запустите второй экземпляр с подключенным отладчиком, чтобы увидеть исключение IOException. [code]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)) //