public static FileMode ConvertFileOpenModeToCLR(FileOpenModeEnum value)
        {
            switch (value)
            {
            case FileOpenModeEnum.Append:
                return(FileMode.Append);

            case FileOpenModeEnum.Create:
                return(FileMode.Create);

            case FileOpenModeEnum.CreateNew:
                return(FileMode.CreateNew);

            case FileOpenModeEnum.Open:
                return(FileMode.Open);

            case FileOpenModeEnum.OpenOrCreate:
                return(FileMode.OpenOrCreate);

            case FileOpenModeEnum.Truncate:
                return(FileMode.Truncate);

            default:
                throw new ArgumentOutOfRangeException(nameof(value), value, null);
            }
        }
 public static ФайловыйПоток Constructor(string filename, FileOpenModeEnum openMode, FileAccessEnum access, object bufferSize = null)
 {
     return(new ФайловыйПоток(
                filename,
                openMode,
                access,
                (int)bufferSize));
 }
 /// <summary>
 ///
 /// Открывает файл в заданном режиме с возможностью чтения и записи.
 /// Файл открывается в режиме разделяемого чтения.
 /// </summary>
 ///
 /// <param name="fileName">
 /// Имя открываемого файла. </param>
 /// <param name="openingMode">
 /// Режим открытия файла. </param>
 /// <param name="fileAccess">
 /// Режим доступа к файлу. </param>
 /// <param name="bufferSize">
 /// Размер буфера для операций с файлом. </param>
 ///
 /// <returns name="FileStream">
 /// Специализированная версия объекта Поток для работы данными, расположенными в файле на диске. Предоставляет возможность чтения из потока, записи в поток и изменения текущей позиции.
 /// По умолчанию, все операции с файловым потоком являются буферизированными, размер буфера по умолчанию - 8 КБ.
 /// Размер буфера можно изменить, в том числе - полностью отключить буферизацию при вызове конструктора.
 /// Следует учитывать, что помимо буферизации существует кэширование чтения и записи файлов в операционной системе, на которое невозможно повлиять программно.</returns>
 ///
 public ФайловыйПоток Открыть(string fileName, FileOpenModeEnum openingMode, FileAccessEnum fileAccess, object bufferSize = null)
 {
     if (bufferSize == null)
     {
         return(ФайловыйПоток.Constructor(fileName, openingMode, fileAccess));
     }
     else
     {
         return(ФайловыйПоток.Constructor(fileName, openingMode, fileAccess, bufferSize));
     }
 }
 public static ФайловыйПоток Constructor(string filename, FileOpenModeEnum openMode, object bufferSize = null)
 {
     if (bufferSize == null || bufferSize is int)
     {
         return(new ФайловыйПоток(
                    filename,
                    openMode,
                    FileAccessEnum.ReadAndWrite,
                    (int)bufferSize));
     }
     else
     {
         // перегрузка методов не позволяет вызвать второй конструктор без доуточнения реальных типов
         return(Constructor(
                    filename,
                    openMode,
                    FileAccessEnum.ReadAndWrite,
                    bufferSize));
     }
 }
Beispiel #5
0
        public FileStreamContext(string filename, FileOpenModeEnum openMode, FileAccessEnum access, int bufferSize = 0)
        {
            FileName = filename;

            if (bufferSize == 0)
            {
                _underlyingStream = new FileStream(filename,
                                                   FileStreamsManager.ConvertFileOpenModeToCLR(openMode),
                                                   FileStreamsManager.ConvertFileAccessToCLR(access));
            }
            else
            {
                _underlyingStream = new FileStream(filename,
                                                   FileStreamsManager.ConvertFileOpenModeToCLR(openMode),
                                                   FileStreamsManager.ConvertFileAccessToCLR(access),
                                                   FileShare.Read,
                                                   bufferSize);
            }

            _commonImpl = new GenericStreamImpl(_underlyingStream);
        }
        public ФайловыйПоток(string filename, FileOpenModeEnum openMode, FileAccessEnum access, int bufferSize = 0)
        {
            ИмяФайла = filename;

            if (bufferSize == 0)
            {
                _underlyingStream = new FileStream(filename,
                                                   МенеджерФайловыхПотоков.ConvertFileOpenModeToCLR(openMode),
                                                   МенеджерФайловыхПотоков.ConvertFileAccessToCLR(access),
                                                   FileShareForAccess(access));
            }
            else
            {
                _underlyingStream = new FileStream(filename,
                                                   МенеджерФайловыхПотоков.ConvertFileOpenModeToCLR(openMode),
                                                   МенеджерФайловыхПотоков.ConvertFileAccessToCLR(access),
                                                   FileShareForAccess(access),
                                                   bufferSize);
            }

            _commonImpl = new GenericStreamImpl(_underlyingStream);
        }