示例#1
0
        /// <summary>
        /// Загружает данные из файла.
        /// </summary>
        /// <param name="path">
        /// Путь к файлу.
        /// </param>
        /// <param name="readMode">
        /// Значение, определяющее режим чтения файла кадра регистрации.
        /// </param>
        /// <returns>
        /// Данные, загруженные из файла.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// Параметр <paramref name="path"/> имеет значение пустой ссылки.
        /// </exception>
        /// <exception cref="ArgumentException">
        /// Параметр <paramref name="path"/> является пустой строкой (""),
        /// содержит только пробелы или содержит один или несколько недопустимых знаков.
        /// -или-
        /// <paramref name="path"/> ссылается на устройство,
        /// которое не является файловым, например "con:", "com1:", "lpt1:" и т. д., в среде NTFS.
        /// </exception>
        /// <exception cref="ArgumentException">
        /// Параметр path является пустой строкой (""), содержит только пробелы или содержит
        /// один или несколько недопустимых знаков.
        /// </exception>
        /// <exception cref="NotSupportedException">
        /// path ссылается на устройство, которое не является файловым, например "con:", "com1:", "lpt1:" и т. д., в среде, отличной от NTFS.
        /// </exception>
        /// <exception cref="FileNotFoundException">
        /// Невозможно найти файл, например, когда mode содержит FileMode.Truncate или FileMode.Open,
        /// а файл, заданный в path, не существует.Файл должен уже существовать в этих режимах.
        /// </exception>
        /// <exception cref="IOException">
        /// Произошла ошибка ввода-вывода, например, задано FileMode.CreateNew, когда файл,
        /// указанный в path, уже существует. – или –Компьютер работает под управлением операционной
        /// системы Windows 98 или Windows 98 Second Edition, и для параметра share задано
        /// значение FileShare.Delete.– или –Поток закрыт.
        /// </exception>
        /// <exception cref="SecurityException">
        /// У вызывающего объекта отсутствует необходимое разрешение.
        /// </exception>
        /// <exception cref="DirectoryNotFoundException">
        /// Указанный путь недопустим; возможно, он соответствует неподключенному диску.
        /// </exception>
        /// <exception cref="UnauthorizedAccessException">
        /// Запрошенный параметр access не разрешен операционной системой для заданного path,
        /// например, когда параметр access равен Write или ReadWrite, а файл или каталог
        /// установлены на доступ только для чтения.
        /// </exception>
        /// <exception cref="PathTooLongException">
        /// Длина указанного пути, имени файла или обоих параметров превышает установленное
        /// в системе максимальное значение.Например, для платформ на основе Windows длина
        /// пути не должна превышать 248 символов, а имена файлов не должны содержать более
        /// 260 символов.
        /// </exception>
        /// <exception cref="ArgumentOutOfRangeException">
        /// Параметр mode содержит недопустимое значение.
        /// </exception>
        public static Tuple <FrameHeader, ChannelCollection> LoadFrame(string path, FileReadMode readMode)
        {
            FileReader reader = null;

            try
            {
                reader = new FileReader(path);
                long fileSize = reader.FileSize;

                reader.Position = 0;
                if (fileSize >= 350 && reader.ReadUInt64() == 0x42414C54534554UL)
                {
                    return(LoadTestLabFrame(path, reader, readMode));
                }

                reader.Position = 0;
                if (fileSize >= 2 && reader.ReadInt16() == 0x1394)
                {
                    return(LoadCatmanFrame(path, reader, readMode));
                }
            }
            finally
            {
                reader?.Close();
            }
            throw new InvalidDataException("Произошла попытка загрузить файл неизвестного формата.");
        }