tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルFTP転送について
記事No7613
投稿日: 2008/05/26(Mon) 16:56
投稿者AMI
        Dim uri As String = "ftp://yahoo.jp/ABC.pdf"
        Dim myFile As String = "c:\aaaaaa.log"
        Dim myPath(50) As String

        Dim req As WebRequest = WebRequest.Create(uri)

        Button1.Enabled = False

        req.Credentials = New NetworkCredential("userID", "PASS")
        req.Method = WebRequestMethods.Ftp.DownloadFile ' 省略可

        Using res As WebResponse = req.GetResponse()
            Using st As Stream = res.GetResponseStream()
                Using fs As New FileStream("c:\1.log", FileMode.Create)
                    Dim buf(1024) As Byte
                    Dim count As Integer = 0
                    Do                                  ' データ受信処理
'A                      count = st.Read(buf, 0, buf.Length)
                        fs.Write(buf, 0, count)
                    Loop While count <> 0
                End Using
            End Using
        End Using

        Using res As WebResponse = req.GetResponse()
            Using st As Stream = res.GetResponseStream()
                Using fs As New FileStream("c:\2.log", FileMode.Create)
                    Dim buf(1024) As Byte
                    Dim count As Integer = 0
                    Do                                  ' データ受信処理
'AA                     count = st.Read(buf, 0, buf.Length)
                        fs.Write(buf, 0, count)
                    Loop While count1 <> 0
                End Using
            End Using
        End Using

いまVB2005で開発を行っております。
FTP転送の件ですが、1件のファイルのダウンロードは成功したのですが、
連続して2個目3個目のファイルをダウンロードしようとして、
ロジックをくんだのですが、
'AA                     count = st.Read(buf, 0, buf.Length)
ここの部分でエラーになります。
エラー内容は
「破棄されたオブジェクトにアクセスできません。
オブジェクト名 'System.Net.Sockets.NetworkStream' です。」
と表示されます。
おそらく、一回目で、オブジェクトをつかっているので、
開放して再度構築しないといけないとおもうのですが、
その方法がわかりません。
ちなみに上記ロジックはデバッグしやすいように書いてます。
実際にはFOR文でダウンロード回数分だけまわしてやろうとかんがえております。
アドバイスの程よろしくおねがいします。

[ツリー表示へ]
タイトル自己レス
記事No7617
投稿日: 2008/05/27(Tue) 14:15
投稿者AMI
>         Dim uri As String = "ftp://yahoo.jp/ABC.pdf"
>         Dim myFile As String = "c:\aaaaaa.log"
>         Dim myPath(50) As String
>
>         Dim req As WebRequest = WebRequest.Create(uri)
>
>         Button1.Enabled = False
>
>         req.Credentials = New NetworkCredential("userID", "PASS")
>         req.Method = WebRequestMethods.Ftp.DownloadFile ' 省略可
>
>         Using res As WebResponse = req.GetResponse()
>             Using st As Stream = res.GetResponseStream()
>                 Using fs As New FileStream("c:\1.log", FileMode.Create)
>                     Dim buf(1024) As Byte
>                     Dim count As Integer = 0
>                     Do                                  ' データ受信処理
> 'A                      count = st.Read(buf, 0, buf.Length)
>                         fs.Write(buf, 0, count)
>                     Loop While count <> 0
>                 End Using
>             End Using
>         End Using
>
>         Using res As WebResponse = req.GetResponse()
>             Using st As Stream = res.GetResponseStream()
>                 Using fs As New FileStream("c:\2.log", FileMode.Create)
>                     Dim buf(1024) As Byte
>                     Dim count As Integer = 0
>                     Do                                  ' データ受信処理
> 'AA                     count = st.Read(buf, 0, buf.Length)
>                         fs.Write(buf, 0, count)
>                     Loop While count1 <> 0
>                 End Using
>             End Using
>         End Using
>
> いまVB2005で開発を行っております。
> FTP転送の件ですが、1件のファイルのダウンロードは成功したのですが、
> 連続して2個目3個目のファイルをダウンロードしようとして、
> ロジックをくんだのですが、
> 'AA                     count = st.Read(buf, 0, buf.Length)
> ここの部分でエラーになります。
> エラー内容は
> 「破棄されたオブジェクトにアクセスできません。
> オブジェクト名 'System.Net.Sockets.NetworkStream' です。」
> と表示されます。
> おそらく、一回目で、オブジェクトをつかっているので、
> 開放して再度構築しないといけないとおもうのですが、
> その方法がわかりません。
> ちなみに上記ロジックはデバッグしやすいように書いてます。
> 実際にはFOR文でダウンロード回数分だけまわしてやろうとかんがえております。
> アドバイスの程よろしくおねがいします。

上記件解決しました。
原因は、いままでは、同じプロシージャ内に記述していたのですが、
変更後はあたらしく「private sub・・・」でダウンロードの処理を作成して、
コマンドボタンがクリックされたときは、そこに飛ばすように変更したら、
連続しての処理が可能となりました。
なんでこのようなエラーがでたのかは、根本的にはわからなかったですが・・・
なにか原因のようなものがあれば情報の方よろしくおねがいします。

[ツリー表示へ]