チェンジセット 1657 (default)


以下の違いを無視:
日時:
2024/08/08 2:38:35 (2ヵ月前)
更新者:
hizuya@…
ログメッセージ:
  • TextWriter.Close 時に例外を無視する機能を追加。
場所:
framework/trunk
ファイル:
1個の追加
3個の更新

凡例:

未変更
追加
削除
  • framework/trunk/CoreLibrary/CoreLibrary.csproj

    r1655 r1657  
    165165    <Compile Include="Sources\IO\BufferedPipeStream.cs" /> 
    166166    <Compile Include="Sources\IO\CloseExceptionIgnorableStream.cs" /> 
     167    <Compile Include="Sources\IO\CloseExceptionIgnorableTextWriter.cs" /> 
    167168    <Compile Include="Sources\IO\CountedStream.cs" /> 
    168169    <Compile Include="Sources\IO\DeliveryStream.cs" /> 
  • framework/trunk/CoreLibrary/Sources/IO/IOUtility.cs

    r1655 r1657  
    14351435 
    14361436        /// <summary> 
     1437        /// 指定したライタを、破棄時に発生する例外を無視するライタでラップします。 
     1438        /// </summary> 
     1439        /// <param name="writer">ラップするライタ。</param> 
     1440        /// <returns> 
     1441        /// ラップしたライタ。 
     1442        /// </returns> 
     1443        /// <exception cref="ArgumentNullException"> 
     1444        /// <paramref name="writer"/> が <see langword="null"/> 参照です。 
     1445        /// </exception> 
     1446        public static TextWriter CreateCloseExceptionIgnorableTextWriter(TextWriter writer) 
     1447        { 
     1448            return new CloseExceptionIgnorableTextWriter(writer); 
     1449        } 
     1450 
     1451        /// <summary> 
    14371452        /// 文字がディレクトリセパレータを表すかを取得します。 
    14381453        /// </summary> 
  • framework/trunk/CoreTest/Sources/IO/IOUtilityTest.cs

    r1655 r1657  
    730730 
    731731        /// <summary> 
     732        /// <see cref="IOUtility.CreateCloseExceptionIgnorableTextWriter"/> をテストします。 
     733        /// </summary> 
     734        [Test] 
     735        public void TestCreateCloseExceptionIgnorableTextWriter() 
     736        { 
     737            Action<bool, Action<TextWriter>> action = delegate(bool useWrapper, Action<TextWriter> callback) 
     738            { 
     739                using (MemoryStream rootStream = new MemoryStream()) 
     740                { 
     741                    TextWriter targetWriter = new StreamWriter(rootStream, Encoding.ASCII, 0x1000); 
     742                    if (useWrapper) 
     743                    { 
     744                        targetWriter = IOUtility.CreateCloseExceptionIgnorableTextWriter(targetWriter); 
     745                    } 
     746 
     747                    try 
     748                    { 
     749                        targetWriter.Write("XXX"); 
     750                    } 
     751                    finally 
     752                    { 
     753                        // 元のストリームを破棄 
     754                        rootStream.Close(); 
     755 
     756                        // StreamWriter.Close() では書き込まれたデータがある場合 Flush() を呼ぶので例外が発生する 
     757                        callback(targetWriter); 
     758                    } 
     759                } 
     760            }; 
     761 
     762            // Close() で例外が発生することを確認 
     763            action( 
     764                false, 
     765                delegate(TextWriter writer) 
     766                { 
     767                    Assert.That( 
     768                        writer.Close, 
     769                        Throws.TypeOf<ObjectDisposedException>(), 
     770                        "Normal close"); 
     771                }); 
     772 
     773            // Close() で例外が発生しないことを確認 
     774            action( 
     775                true, 
     776                delegate(TextWriter writer) 
     777                { 
     778                    writer.Close(); 
     779                }); 
     780        } 
     781 
     782        /// <summary> 
    732783        /// 再解析ポイントを作成します。 
    733784        /// </summary> 
詳しい使い方は TracChangeset を参照してください。