Как открыть StreamReader в режиме ShareDenyWrite?

Как открыть StreamReader с FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_DELETE?


Тот же вопрос, немного расширенный

Как открыть StreamReader, чтобы я мог прочитать закодированный текстовый файл с параметрами общего доступа, чтобы другой процесс мог прочитать файл?

Как открыть StreamReader, чтобы я мог читать закодированный текстовый файл с параметрами общего доступа, чтобы другой процесс мог изменять файл, пока я его читаю?

Как открыть StreamReader, чтобы я мог прочитать закодированный текстовый файл с параметрами общего доступа, чтобы другой процесс мог удалить файл, пока я его читаю?


Тот же вопрос, чуть более развернутый

В библиотеке классов .NET Framework есть класс с именем StreamReader. Это единственный класс, предназначенный для чтения "текста", поэтому он происходит от абстрактного базового класса TextReader. TextReader/StreamReader позволяет вам указать кодировку, используемую файлом, который вы пытаетесь открыть, и может декодировать файл для вас, возвращая Strings текста.

Как только я открыл файл с StreamReader:

var sr = new StreamReader(path);

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

  • Нет: отклоняет общий доступ к текущему файлу. Любой запрос на открытие файла (этим процессом или другим процессом) не будет выполнен до тех пор, пока файл не будет закрыт.
  • Чтение: разрешает последующее открытие файла для чтения. Если этот флаг не указан, любой запрос на открытие файла для чтения (этим процессом или другим процессом) будет завершаться ошибкой, пока файл не будет закрыт. Однако даже если этот флаг указан, для доступа к файлу могут потребоваться дополнительные разрешения.
  • Запись: разрешает последующее открытие файла для записи. Если этот флаг не указан, любой запрос на открытие файла для записи (этим процессом или другим процессом) не будет выполнен до тех пор, пока файл не будет закрыт. Однако даже если этот флаг указан, для доступа к файлу могут потребоваться дополнительные разрешения.
  • ReadWrite: разрешает последующее открытие файла для чтения или записи. Если этот флаг не указан, любой запрос на открытие файла для чтения или записи (этим процессом или другим процессом) будет завершаться ошибкой до тех пор, пока файл не будет закрыт. Однако даже если этот флаг указан, для доступа к файлу могут потребоваться дополнительные разрешения.
  • Удалить: позволяет последующее удаление файла.

За исключением того, что по понятным причинам я не могу использовать FileStream - должен использовать StreamReader.

Как я могу открыть StreamReader с FileShare.ReadWrite | FileShare.Delete?


person Ian Boyd    schedule 18.09.2012    source источник


Ответы (2)


StreamReader имеет конструктор, который может принимать поток. Поэтому вместо использования конструктора, который принимает строковый путь, сначала создайте FileStream с нужными параметрами, а затем передайте этот FileStream конструктору StreamReader.

person Sean Carpenter    schedule 18.09.2012

Как я могу открыть StreamReader с помощью FileShare.ReadWrite | FileShare.Удалить ?

Когда вы решили задачу для Stream, Reader прост:

var fs = new FileStream(fileName, FileMode.Open, FileShare.ReadWrite|FileShare.Delete);
var sr = new StreamReader(fs);

И, конечно же, это должно быть заключено в блок using() { }.

person Henk Holterman    schedule 18.09.2012
comment
Извини, Хенк, но Шон нуждается в представителе больше, чем ты :) - person Ian Boyd; 18.09.2012
comment
В С# 4.5 я вижу использование как var fs = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete); а именно они добавили еще один параметр между FileMode.Open и FileShare.ReadWrite, который является FileAccess.. - person phoad; 28.12.2013
comment
@phoad - я не думаю, что это ново, у него несколько перегрузок. - person Henk Holterman; 28.12.2013
comment
Я имею в виду, что я не мог видеть конструктор только с параметром FileShare, всем им нужен параметр FileAccess, если требуется использовать FileShare. msdn.microsoft.com/ ru/библиотека/ - person phoad; 28.12.2013