См. Пример простого примера устройства ниже
[Test]
public void TextReaderRequiresWriteAccessToFile()
{
using (var reader = File.OpenText(Path.Combine(Folder, "Texts.txt")))
{
}
}
Этот тест терпит неудачу, когда я открываю текстовый файл в редакторе. Я ожидаю, что файл будет открыт с привилегиями чтения с помощью File.OpenText
.
System.IO.IOException: процесс не может получить доступ к файлу "C:\* местоположение в папку *\Texts.txt", потому что он используется другим процессом.
Есть ли причина, почему.NET требует дополнительных привилегий для открытия файла для чтения через этот API?
О, но это требует только привилегий чтения.
Проблема в том, что редактор предотвращает даже доступ на чтение (в.NET, который будет FileShare.None
- по умолчанию для доступа на запись). Если вы открыли файл с использованием OpenText
в обоих случаях, а не с помощью редактора, все будет работать нормально. Поэтому вам, вероятно, нужен редактор, который не блокирует файл (например, Visual Studio).
Это не проблема.NET - редактор запрещает вам полностью открывать файл для чтения. Возможно, вам захочется немного почитать доступ к файлу.
Когда ваш файл открыт в текстовом редакторе, у него есть дескриптор, открытый для него. Это означает, что вам нужно явно открыть файл с помощью FileShare.Read
. Таким образом, вы получите доступ на чтение, пока файл уже открыт в режиме чтения/записи в другом месте.
using (var reader = File.OpenText(Path.Combine(Folder, "Texts.txt"), FileMode.Open, FileAccess.Read, FileShare.Read))
{
}
FileShare.ReadWrite