/// <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); }
/// <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); } }