C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: stream.closeで元のstreamを閉じないためには


(過去ログ 77 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■45075 / inTopicNo.1)  stream.closeで元のstreamを閉じないためには
  
□投稿者/ lain (1回)-(2009/12/28(Mon) 20:00:24)

分類:[VB.NET/VB2005 以降] 

vbを勉強しはじめたのですが、わからない点があったので質問させていただきます。

streamのcloseメソッドを呼び出すと、自身のstreamメソッドだけではなく、その基になるストリームも閉じると思うのですが、これを自身のstreamは閉じ、基になるストリームは閉じない方法はないのでしょうか?
あれば方法を教えていただけると嬉しいです。

また、自分の使っているvbのバージョンを書こうと思ったのですが、どうすれば自身の使っているvbのバージョンを確認できるのですか?
こちらも知っていれば教えていただけると嬉しいです。

OS: XP
開発環境 :visual studio 2005(のwindowsフォームアプリケーション)
引用返信 編集キー/
■45076 / inTopicNo.2)  Re[1]: stream.closeで元のstreamを閉じないためには
□投稿者/ 中博俊 (1342回)-(2009/12/28(Mon) 20:39:00)
無いと思います。
なぜそういうことがしたいのですか?(まぁ何となくわかりますが。)

VBのバージョンは
VS2002 7.0
VS2003 7.1
VS2005 8.0
VS2008 9.0
とざっくり書いとけばいいかと。
引用返信 編集キー/
■45077 / inTopicNo.3)  Re[2]: stream.closeで元のstreamを閉じないためには
□投稿者/ Hongliang (533回)-(2009/12/28(Mon) 20:46:43)
Close でどうするかはその具象クラスの実装次第です。
例えば GZipStream では、コンストラクタで GZipStream を Close したときにもとになる Stream を Close するかどうかを指定する Boolean 型の引数があります。
対照的に、CryptoStream では Close はもとになる Stream をも必ず閉じるように実装されており、その代わり独自に FlushFinalBlock メソッドを用意して Close を呼び出さなくてもいいようになっています。
引用返信 編集キー/
■45099 / inTopicNo.4)  Re[3]: stream.closeで元のstreamを閉じないためには
□投稿者/ lain (2回)-(2009/12/30(Wed) 05:23:33)
<<中博俊さん
おへんじありがとうございます。
なぜこういうことがしたいかというと、基になるstreamを再利用したいんです。

vbのバージョンの方は、後で自分で検索した結果vb 6.0だとわかりました。
引用返信 編集キー/
■45139 / inTopicNo.5)  Re[4]: stream.closeで元のstreamを閉じないためには
□投稿者/ lain (3回)-(2010/01/01(Fri) 21:39:25)
<<Hongliangさん

お返事おくれてすいません。返信ありがとうございます。

具象クラスによってちがうんですね。
自分の場合はFileStreamが基のStreamReadrクラスのcloseメソッドなのですが、このstreamは基になるstreamを閉じないようにする方法はあるのでしょうか?
引用返信 編集キー/
■45141 / inTopicNo.6)  Re[5]: stream.closeで元のstreamを閉じないためには
□投稿者/ επιστημη (2368回)-(2010/01/01(Fri) 23:00:06)
επιστημη さんの Web サイト
> 基になるstreamを閉じないようにする方法はあるのでしょうか?

↓つくればあるもーん...てゆーおためし

Imports System.IO

Namespace Trial
    Public Class NonCloseStreamRader : Inherits StreamReader
        Public Sub New(ByVal strm As Stream)
            MyBase.New(strm)
        End Sub
        Public Overrides Sub Close()
            Console.WriteLine("CloseしないYO!")
        End Sub
        Public Sub DoClose()
            MyBase.Close()
        End Sub
    End Class
End Namespace

Module Module1

    Sub Main()
        Dim strm As FileStream = File.OpenRead("Module1.vb")
        Dim reader As New Trial.NonCloseStreamRader(strm)
        Dim line As String

        Console.WriteLine("--- first 10 line")
        For I AS Integer = 1 To 10
          line = reader.ReadLine()
          Console.WriteLine(line)
        Next
        reader.Close() ' ---- Closeしなーい

        Console.WriteLine("--- rest of lines")
        Do
            line = reader.ReadLine()
            If line Is Nothing Then Exit Do
            Console.WriteLine(line)
        Loop

        reader.DoClose()

    End Sub

End Module

引用返信 編集キー/
■45143 / inTopicNo.7)  Re[4]: stream.closeで元のstreamを閉じないためには
□投稿者/ Azulean (491回)-(2010/01/01(Fri) 23:55:39)
本筋ではないですが、突っ込んでおきます。

No45099 (lain さん) に返信
> vbのバージョンの方は、後で自分で検索した結果vb 6.0だとわかりました。
Visual Studio 2005 を利用されているのであれば、VB6 ではありません。(Visual Basic 2005 とは言えるかもしれない)
何を元に、VB 6.0 と判断したのか分かりませんが、その判断方法が間違っている可能性があります。
引用返信 編集キー/
■45189 / inTopicNo.8)  Re[5]: stream.closeで元のstreamを閉じないためには
□投稿者/ lain (4回)-(2010/01/05(Tue) 17:31:18)
<<επιστημηさん
お返事ありがとうございます。

色々考えてみたんですが、このcloseメソッドは基になるstreamは閉じてはいませんが、これをもとにしたstreamreaderも閉じてはいないんじゃないでしょうか? と思ったんですがちがいますか? なにぶんVBは勉強を始めたばかりで知識不足なので自分の考えがあっているかも自信がないんですが;;
引用返信 編集キー/
■45190 / inTopicNo.9)  Re[6]: stream.closeで元のstreamを閉じないためには
□投稿者/ lain (5回)-(2010/01/05(Tue) 17:35:23)
<<Azuleanさん
お返事ありがとうございます。

ご指摘ありがとうございます、自分で調べた方法はかなり見当違いの所をみていたのがわかりました。
ただ、そうなると疑問に残る点はどうやれば自分のVBのバージョンを調べることができるのでしょう?なにか簡単に調べれる方法はありますか?
引用返信 編集キー/
■45192 / inTopicNo.10)  Re[7]: stream.closeで元のstreamを閉じないためには
□投稿者/ 魔界の仮面弁士 (1437回)-(2010/01/05(Tue) 17:41:17)
2010/01/05(Tue) 18:01:27 編集(投稿者)
No45190 (lain さん) に返信
> ただ、そうなると疑問に残る点はどうやれば自分のVBのバージョンを調べることができるのでしょう?

Visual Studio をお使いなら、そのバージョンが VB のバージョンを表しています。

Visual Studio 97        なら、VB5.0
Visual Studio 6.0       なら、VB6.0
Visual Studio .NET(2002)なら、VB2002 (VB 7.0)
Visual Studio .NET 2003 なら、VB2003 (VB 7.1)
Visual Studio 2005      なら、VB2005 (VB 8.0)
Visual Studio 2008      なら、VB2008 (VB 9.0)
Visual Studio 2010      なら、VB2010 (VB 10.0)

# 一応 VB6 にも、Stream と呼ばれるものは幾つかありますが、
# VB6 で使われるオブジェクトは、.NET Framework のクラスではありません。


もし、プログラム的に判断したいのであれば、さほど正確ではありませんが、
 MsgBox( ScriptEngine & ":" _
       & CStr(ScriptEngineMajorVersion) & "." _
       & CStr(ScriptEngineMinorVersion) & "." _
       & CStr(ScriptEngineBuildVersion) )
を実行して、バージョン番号を調べる事ができます。

≪実行結果の例≫

VB.NET 2002 以降     … "VB:7.10.0" とか "VB:8.0.50727" など。(2005 と 2008 は区別できません)
VBScript 2.0 以降    … "VBScript:5.8.18702" など。(VBScript 1.0 ではエラー)
VB6以下 あるいは VBA … エラー。(ScriptEngine 等が未定義変数として扱われる)

引用返信 編集キー/
■45202 / inTopicNo.11)  Re[6]: stream.closeで元のstreamを閉じないためには
□投稿者/ επιστημη (2369回)-(2010/01/05(Tue) 19:43:50)
επιστημη さんの Web サイト
> 色々考えてみたんですが、このcloseメソッドは基になるstreamは閉じてはいませんが、これをもとにしたstreamreaderも閉じてはいないんじゃないでしょうか? と思ったんですがちがいますか?

メンバ変数なんにもないのに、何を閉じればいいですか?

引用返信 編集キー/
■45371 / inTopicNo.12)  Re[7]: stream.closeで元のstreamを閉じないためには
□投稿者/ lain (6回)-(2010/01/11(Mon) 16:42:10)
<<魔界の仮面弁士さん
お返事ありがとうございます。色々細かく書いていただいてとてもよくわかりました。ありがとうございます。
引用返信 編集キー/
■45372 / inTopicNo.13)  Re[8]: stream.closeで元のstreamを閉じないためには
□投稿者/ lain (7回)-(2010/01/11(Mon) 16:49:43)
<<επιστημηさん
何度もお返事ありがとうございます。

いまいち言われている事の意味が理解できていないのですが、自分がやりたいのは
filestreamを基にしたstreamreaderを閉じたいんですが、filestreamは閉じたくないんです。
書いていただいたソースコードで説明すると、strmは閉じたくないんですがreaderは閉じたいんです。
何度も突き合わせてしまって恐縮ですが、またお返事お待ちしております。
引用返信 編集キー/
■45373 / inTopicNo.14)  Re[9]: stream.closeで元のstreamを閉じないためには
□投稿者/ Hongliang (543回)-(2010/01/11(Mon) 17:05:37)
StreamReader なら Flush すればいいんじゃないですか?
なぜ Close にこだわるのでしょう?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -