예제 #1
0
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     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;
        }
예제 #2
0
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     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());
        }
예제 #3
0
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     Public Method
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

        /// <summary>
        /// ウディタ文字列のbyte配列に変換する。
        /// </summary>
        /// <returns>ウディタ文字列のbyte配列</returns>
        public IEnumerable <byte> ToWoditorStringBytes()
        {
            var woditorStr = new WoditorString(Value);

            return(woditorStr.StringByte);
        }