открытый файл в эксклюзивном режиме в C#

Вы можете использовать Zxing.Net.Mobile 2.3.1, я тестирую его, у него не было этой проблемы.

17
задан MKII 27 August 2015 в 13:32
поделиться

5 ответов

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

static void Main(string[] args)
{
    // Make sure test.txt exists before running. Run this app twice to see.
    File.Open("test.txt", FileMode.Open, FileAccess.Read, FileShare.None);
    Console.ReadKey();
}
20
ответ дан 30 November 2019 в 12:36
поделиться

То, что Вы сделали, корректно.

Если Вам нужно в том, что является всеми файлами, уже открытыми, то существует способ видеть NtQuerySystemInformation

Можно получить идею из http://www.codeproject.com/KB/shell/OpenedFileFinder.aspx

который получает все файлы, открытые в каталоге.. который может быть расширен на единственный файл или открыт или нет...

3
ответ дан 30 November 2019 в 12:36
поделиться

Протестируйте его путем записи простой программы консольного режима, которая открывает файл и затем ожидает:

static void Main(string args[])
{
    using (FileStream f = File.Open("c:\\software\\code.txt", FileMode.Open, FileAccess.Read, FileShare.None))
    {
        Console.Write("File is open. Press Enter when done.");
        Console.ReadLine();
    }
}

Запущенный, что программа из командной строки (или другой экземпляр Visual Studio), и затем запущенный Ваша программа. Тем путем можно играть с различными значениями для FileMode и FileShare, чтобы удостовериться, что программа реагирует правильно во всех случаях.

И, нет, Вы не должны проверять, чтобы видеть, открыт ли файл сначала. Ваш код должен выдать исключение, если файл уже открыт. Таким образом, все, что необходимо сделать, обрабатывают то исключение.

3
ответ дан 30 November 2019 в 12:36
поделиться

FileShare. Ни один не будет только работать, если другой процесс также открыл файл, не позволяя этому быть совместно использованным для чтений.

Программы, такие как Блокнот и Visual Studio не блокируют текстовые файлы.

2
ответ дан 30 November 2019 в 12:36
поделиться

Я предложил бы использовать FileAccess.ReadWrite участник, потому что некоторые файлы могут уже быть открыты, но позволить Вам Read доступ на файле. Однако я предположил бы, что в неисключительных условиях, все файлы открываются для Read/Write доступ не позволил бы Ваш код Write в файл.

Конечно (поскольку Mehrdad уже объяснил) при использовании редактора, такого как Блокнот для открытия файла как теста, Вы не сможете ограничить доступ, потому что Блокнот не блокирует файл вообще.

2
ответ дан 30 November 2019 в 12:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: