Пример #1
0
        /// <summary>
        ///  指定されたバイト配列をヱンコンセクションに変換します。
        /// </summary>
        /// <param name="obj">ヱンコンセクションに変換するバイト配列です。</param>
        /// <returns>
        ///  変換後のデータを保持するヱンコンセクションです。
        ///  バージョンが一致しない場合は<see langword="null"/>が返ります。
        /// </returns>
        /// <exception cref="System.ArgumentNullException">
        ///  <paramref name="obj"/>が<see langword="null"/>の場合に発生します。
        /// </exception>
        /// <exception cref="Yencon.Exceptions.InvalidHeaderException">
        ///  ヘッダー情報が不正な場合に発生します。
        /// </exception>
        public YSection ToYencon(byte[] obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException(nameof(obj));
            }

            YSection result;

            using (var ms = new MemoryStream(obj))
                using (var br = new BinaryReader(ms)) {
                    // ヘッダー情報の取得
                    Header.FromBinary(br.ReadBytes(12));
                    // バージョンを確認
                    if (Header.CheckVersion())
                    {
                        // ルートセクションを取得
                        result = ReadSection(br);
                    }
                    else
                    {
                        // バージョンが合わない場合は読み込みを停止する
                        result = null;
                    }
                }

            return(result);
        }
Пример #2
0
 /// <summary>
 ///  指定されたファイルのヱンコンの種類を判定します。
 /// </summary>
 /// <param name="filename">判定するファイルのファイル名です。</param>
 /// <returns>ヱンコンの種類を表す型'<see cref="Yencon.YenconType"/>'の値です。</returns>
 /// <exception cref="System.IO.IOException">
 ///  ファイルの入力に失敗した場合に発生します。
 /// </exception>
 public static YenconType GetYenconType(string filename)
 {
     try {
         YenconType result;
         using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
             using (var br = new BinaryReader(fs))
                 using (var sr = new StreamReader(fs)) {
                     var hdr = new YenconBinaryHeader();
                     try {
                         hdr.FromBinary(br.ReadBytes(12));
                         result = hdr.CheckVersion() ? YenconType.Binary : YenconType.Unknown;
                     } catch (InvalidHeaderException) {
                         fs.Position = 0;
                         var tknzr = new YenconStringTokenizer(sr.ReadToEnd());
                         try {
                             tknzr.Scan();
                             result = YenconType.Text;
                         } catch (InvalidSyntaxException) {
                             result = YenconType.Unknown;
                         }
                     }
                 }
         return(result);
     } catch (Exception e) {
         throw new IOException(string.Format(ErrorMessages.YenconFormatRecognition_IOException, filename), e);
     }
 }