/// <summary> /// タグ情報を読み取ります。 /// </summary> /// <param name="src">情報を読み取るストリーム。</param> /// <param name="tag">タグ。</param> /// <returns>成功時はタグ情報。それ以外は null 参照。</returns> /// <exception cref="NotSupportedException">未サポートの操作です。</exception> public object Read( Stream src, AsfTagInfo tag ) { if( tag == null ) { throw new ArgumentNullException( "tag" ); } ObjectTagValue data; return ( this._tags.TryGetValue( tag.Name, out data ) ? data.Read( tag.Type, src ) : null ); }
/// <summary> /// 指定されたタグ情報を所有していることを調べます。 /// </summary> /// <param name="tag">タグ。</param> /// <returns>所有している場合は true。それ以外は false。</returns> public bool HasValue( AsfTagInfo tag ) { return this._tags.ContainsKey( tag.Name ); }
/// <summary> /// タグ情報を書き込みます。 /// 既存のタグがなければ追加、ある場合は更新をおこないます。 /// </summary> /// <param name="tag">タグ。</param> /// <param name="value">タグ情報。値を削除する場合は null を指定します。</param> /// <exception cref="ArgumentNullException">tag が null 参照です。</exception> /// <exception cref="NotSupportedException">指定されたタグは読み取り専用です。</exception> public void Write( AsfTagInfo tag, object value ) { if( tag == null ) { throw new ArgumentNullException( "tag" ); } if( !tag.CanEdit ) { throw new NotSupportedException( "Tag is read-only." ); } ObjectTagValue tagValue; if( value == null ) { // 削除 if( this._tags.TryGetValue( tag.Name, out tagValue ) ) { this.Size -= tagValue.Length; this._tags.Remove( tag.Name ); } } else { // 更新と追加 if( this._tags.TryGetValue( tag.Name, out tagValue ) ) { // 更新 this.Size -= tagValue.Length; tagValue = new ObjectTagValue( tag.Type, value ); this.Size += tagValue.Length; this._tags[ tag.Name ] = tagValue; } else { // 追加 tagValue = new ObjectTagValue( tag.Type, value ); this.Size += tagValue.Length; this._tags.Add( tag.Name, tagValue ); } } }
/// <summary> /// タグ情報を読み取ります。 /// </summary> /// <param name="src">情報を読み取るストリーム。</param> /// <param name="tag">タグ。</param> /// <returns>成功時はタグ情報。それ以外は null 参照。</returns> /// <exception cref="NotSupportedException">未サポートの操作です。</exception> public object Read( Stream src, AsfTagInfo tag ) { throw new NotSupportedException(); }
/// <summary> /// 指定されたタグ情報を所有していることを調べます。 /// </summary> /// <param name="tag">タグ。</param> /// <returns>所有している場合は true。それ以外は false。</returns> /// <exception cref="NotSupportedException">未サポートの操作です。</exception> public bool HasValue( AsfTagInfo tag ) { throw new NotSupportedException(); }
/// <summary> /// タグ情報を追加、更新、または削除します。 /// </summary> /// <param name="tag">タグ。</param> /// <param name="value">タグ情報。値を削除する場合は null を指定します。</param> /// <exception cref="NotSupportedException">未サポートの操作です。</exception> public void Write( AsfTagInfo tag, object value ) { throw new NotSupportedException(); }
/// <summary> /// タグ情報を書き込みます。 /// 既存のタグがなければ追加、ある場合は更新をおこないます。 /// </summary> /// <param name="tag">タグ。</param> /// <param name="value">タグ情報。値を削除する場合は null を指定します。</param> public void Write( AsfTagInfo tag, object value ) { throw new NotSupportedException( "This object is read-only." ); }
/// <summary> /// タグ情報を読み取ります。 /// </summary> /// <param name="src">情報を読み取るストリーム。</param> /// <param name="tag">タグ。</param> /// <returns>成功時はタグ情報。それ以外は null 参照。</returns> /// <exception cref="NotSupportedException">未サポートの操作です。</exception> public object Read( Stream src, AsfTagInfo tag ) { if( tag == AsfTags.Duration ) { return this.Duration; } else if( tag == AsfTags.FileSize ) { return this.FileSize; } return null; }
/// <summary> /// 指定されたタグ情報を所有していることを調べます。 /// </summary> /// <param name="tag">タグ。</param> /// <returns>所有している場合は true。それ以外は false。</returns> public bool HasValue( AsfTagInfo tag ) { return ( tag == AsfTags.Duration || tag == AsfTags.FileSize ); }
/// <summary> /// タグ情報を書き込みます。 /// 既存のタグがなければ追加、ある場合は更新をおこないます。 /// </summary> /// <param name="tag">タグ。</param> /// <param name="value">タグ情報。値を削除する場合は null を指定します。</param> public void Write( AsfTagInfo tag, object value ) { IAsfObject obj; if( this._objects.TryGetValue( tag.HeaderObject, out obj ) ) { var old = obj.Size; obj.Write( tag, value ); var size = obj.Size - old; this.Size += size; // ファイル サイズを更新 var file = this._objects[ HeaderObjectType.FileProperties ] as FilePropertiesObject; file.FileSize += ( ulong )( size ); } }
/// <summary> /// タグ情報を読み取ります。 /// </summary> /// <param name="tag">タグ。</param> /// <param name="src">情報を読み取るストリーム。</param> /// <returns>成功時はタグ情報。それ以外は null 参照。</returns> /// <exception cref="ArgumentNullException">tag が null 参照です。</exception> public object Read( AsfTagInfo tag ) { if( tag == null ) { throw new ArgumentNullException( "'tag' is null." ); } IAsfObject obj; return ( this._objects.TryGetValue( tag.HeaderObject, out obj ) ? obj.Read( this._src, tag ) : null ); }
/// <summary> /// 指定されたタグ情報を所有していることを調べます。 /// </summary> /// <param name="tag">タグ。</param> /// <returns>所有している場合は true。それ以外は false。</returns> /// <exception cref="ArgumentNullException">tag が null 参照です。</exception> public bool HasValue( AsfTagInfo tag ) { if( tag == null ) { throw new ArgumentNullException( "'tag' is null." ); } IAsfObject asfObject; return ( this._objects.TryGetValue( tag.HeaderObject, out asfObject ) ? asfObject.HasValue( tag ) : false ); }