// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Constructor // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// コンストラクタ /// </summary> /// <param name="value">[NotNull][NotNewLine] ファイル名</param> /// <exception cref="ArgumentNullException">valueがnullの場合</exception> /// <exception cref="ArgumentNewLineException"> /// valueに改行が含まれる場合、 /// または255byteを超える場合 /// </exception> /// <exception cref="ArgumentException">valueがファイル名として不適切な場合</exception> public FilePath(string value) { if (value is null) { throw new ArgumentNullException( ErrorMessage.NotNull(nameof(value))); } if (value.HasNewLine()) { throw new ArgumentNewLineException( ErrorMessage.NotNewLine(nameof(value), value)); } // 空文字チェック if (value.IsEmpty()) { if (!IsAllowEmptyString) { throw new ArgumentException( ErrorMessage.Unsuitable("ファイル名", $"(パス:{value})")); } // 空文字許可の場合、これ以上のチェック不要 Value = value; return; } var woditorString = new WoditorString(value); if (woditorString.ByteLength > MaxLength) { throw new ArgumentException( ErrorMessage.OverDataSize(MaxLength)); } // フルパスチェック try { var _ = Path.GetFullPath(value); } catch (Exception ex) { throw new ArgumentException( ErrorMessage.Unsuitable("ファイル名", $"(パス:{value})"), ex); } // ファイル名が適切かどうかチェック var fileName = Path.GetFileName(value); if (fileName.HasInvalidFileNameChars()) { throw new ArgumentException( ErrorMessage.Unsuitable("ファイル名", $"(パス:{value})")); } Value = value; }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Private Static Method // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// 選択肢リストの文字列をバイト配列データにして列挙する。 /// </summary> /// <param name="specialStringArgCases">対象選択肢列挙</param> private static IEnumerable <byte> MakeSpecialArgCaseStringByte( IEnumerable <IEnumerable <string> > specialStringArgCases) { var result = new List <byte>(); foreach (var caseStrings in specialStringArgCases) { var caseStrArr = caseStrings.ToArray(); // 選択肢数 result.AddRange(caseStrArr.Length.ToBytes(Endian.Woditor)); // 選択肢文字列 foreach (var caseString in caseStrArr) { var caseWoditorString = new WoditorString(caseString); result.AddRange(caseWoditorString.StringByte); } } return(result.ToArray()); }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Public Method // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// ウディタ文字列のbyte配列に変換する。 /// </summary> /// <returns>ウディタ文字列のbyte配列</returns> public IEnumerable <byte> ToWoditorStringBytes() { var woditorStr = new WoditorString(Value); return(woditorStr.StringByte); }