ファイルダウンロードの成功と失敗で・・・
投稿者 Keno31o  (小学生)
投稿日時
2009/12/24 06:11:52
こんにちは。
ファイルが存在しているかどうかはDirというものでわかりますよ。
If PathIsDirectory(rtf) Then
Internet_rtf.DownloadFile(rtf, Me.RichTextBox1.Text)
Dim ini As String = Internet_ini.DownloadString(inid)
Else
RichTextBox1.Text = "ERROR"
End If
(未確認です...)
ネットは、http://dobon.net/vb/dotnet/internet/httpstatuscode.htmlを参考にどうぞ。
ファイルが存在しているかどうかはDirというものでわかりますよ。
If PathIsDirectory(rtf) Then
Internet_rtf.DownloadFile(rtf, Me.RichTextBox1.Text)
Dim ini As String = Internet_ini.DownloadString(inid)
Else
RichTextBox1.Text = "ERROR"
End If
(未確認です...)
ネットは、http://dobon.net/vb/dotnet/internet/httpstatuscode.htmlを参考にどうぞ。
投稿者 Keno31o  (小学生)
投稿日時
2009/12/24 06:35:31
てっきりPCの中にあるものを調べるのかと思ってました・・w
http://www.atmarkit.co.jp/fdotnet/dotnettips/817httpstatus/httpstatus.htmlを改良してみましたが、存在しないと、例外で停止してしまいます。
Imports System
Imports System.Net
Public Class Form1
Dim Internet_ini As Net.WebClient = New Net.WebClient()
Dim inid As String = "http://***/cats.ini"
Dim Internet_rtf As Net.WebClient = New Net.WebClient()
Dim rtf As String = "http://***/top.rtf"
Dim url As String = "http://www.yahoo.co.jp/hoge.html"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
WebRequest.DefaultWebProxy = Nothing
Dim statusCode As HttpStatusCode = GetStatusCode(rtf)
Dim code As Integer = CType(statusCode, Integer)
If code >= 400 Then
'Richtextbox1にerror.rtfを 仮にerrorと表示
RichTextBox1.Text = "ERROR"
Else
Internet_rtf.DownloadFile(rtf, Me.RichTextBox1.Text)
Dim ini As String = Internet_ini.DownloadString(inid)
End If
End Sub
Public Shared Function GetStatusCode(ByVal url As String) As HttpStatusCode
Dim rtf As String = "http://***/top.rtf"
Dim statusCode As HttpStatusCode
Dim req As HttpWebRequest = _
CType(WebRequest.Create(rtf), HttpWebRequest)
Dim res As HttpWebResponse = Nothing
Try
res = CType(req.GetResponse(), HttpWebResponse)
statusCode = res.StatusCode
Catch ex As WebException
res = CType(ex.Response, HttpWebResponse)
If Not res Is Nothing Then
statusCode = res.StatusCode
Else
Throw
End If
Finally
If Not res Is Nothing Then
res.Close()
End If
End Try
Return statusCode
End Function
End Class
どうやって改良したらいいのか・・・
徹夜で考えます。もう少しお時間ください。
http://www.atmarkit.co.jp/fdotnet/dotnettips/817httpstatus/httpstatus.htmlを改良してみましたが、存在しないと、例外で停止してしまいます。
Imports System
Imports System.Net
Public Class Form1
Dim Internet_ini As Net.WebClient = New Net.WebClient()
Dim inid As String = "http://***/cats.ini"
Dim Internet_rtf As Net.WebClient = New Net.WebClient()
Dim rtf As String = "http://***/top.rtf"
Dim url As String = "http://www.yahoo.co.jp/hoge.html"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
WebRequest.DefaultWebProxy = Nothing
Dim statusCode As HttpStatusCode = GetStatusCode(rtf)
Dim code As Integer = CType(statusCode, Integer)
If code >= 400 Then
'Richtextbox1にerror.rtfを 仮にerrorと表示
RichTextBox1.Text = "ERROR"
Else
Internet_rtf.DownloadFile(rtf, Me.RichTextBox1.Text)
Dim ini As String = Internet_ini.DownloadString(inid)
End If
End Sub
Public Shared Function GetStatusCode(ByVal url As String) As HttpStatusCode
Dim rtf As String = "http://***/top.rtf"
Dim statusCode As HttpStatusCode
Dim req As HttpWebRequest = _
CType(WebRequest.Create(rtf), HttpWebRequest)
Dim res As HttpWebResponse = Nothing
Try
res = CType(req.GetResponse(), HttpWebResponse)
statusCode = res.StatusCode
Catch ex As WebException
res = CType(ex.Response, HttpWebResponse)
If Not res Is Nothing Then
statusCode = res.StatusCode
Else
Throw
End If
Finally
If Not res Is Nothing Then
res.Close()
End If
End Try
Return statusCode
End Function
End Class
どうやって改良したらいいのか・・・
徹夜で考えます。もう少しお時間ください。
投稿者 流れ者  (その他)
投稿日時
2009/12/25 01:05:55
こんにちは。
下記のアドレス
http://dobon.net/vb/dotnet/internet/downloadfile.html
が、かなり参考になると思います。
エラーチェックもされてますし、ダウンロード状況を表示するようにもなっています。
下記のアドレス
http://dobon.net/vb/dotnet/internet/downloadfile.html
が、かなり参考になると思います。
エラーチェックもされてますし、ダウンロード状況を表示するようにもなっています。
投稿者 ウッチー  (小学生)
投稿日時
2009/12/29 22:34:05
ご返答ありがとうごいざいます。
お二方のご返答を参考にして以下のようなクラスを作成してみました。
・・・なのですがどうしても分からない部分があり、その部分をご教授願います。
14,16,29,31行目の
がエラーになってしまいます。
普通のフォームを使用したものではエラーにはならなかったのですが・・・。
重ねてご迷惑をおかけしますが、宜しくお願いします。
お二方のご返答を参考にして以下のようなクラスを作成してみました。
Imports System
Imports System.Net
Imports System.Threading
Class Class1
Shared Sub top(ByVal i As Integer)
Dim url As New Uri("http://***/top.txt")
Dim downfile As String = "./top.txt"
Dim wc As New WebClient()
wc = New System.Net.WebClient()
'イベントハンドラの作成
AddHandler wc.DownloadProgressChanged, _
AddressOf downloadClient_DownloadProgressChanged
AddHandler wc.DownloadFileCompleted, _
AddressOf downloadClient_DownloadFileCompleted
wc.DownloadFileAsync(url, downfile)
Console.WriteLine("ダウンロード完了:{0}", i)
End Sub
Shared Sub ini(ByVal i As Integer)
Dim url As New Uri("http://***/top.txt")
Dim wc As New WebClient()
Dim downfile As String = "./top.txt"
wc = New System.Net.WebClient()
'イベントハンドラの作成
AddHandler wc.DownloadProgressChanged, _
AddressOf downloadClient_DownloadProgressChanged
AddHandler wc.DownloadFileCompleted, _
AddressOf downloadClient_DownloadFileCompleted
wc.DownloadFileAsync(url, downfile)
End Sub
Private Sub downloadClient_DownloadProgressChanged(ByVal sender As Object, _
ByVal e As System.Net.DownloadProgressChangedEventArgs)
Console.WriteLine( _
"{0}% ({1}byte 中 {2}byte) ダウンロードが終了しました。", _
e.ProgressPercentage, e.TotalBytesToReceive, e.BytesReceived)
End Sub
Private Sub downloadClient_DownloadFileCompleted(ByVal sender As Object, _
ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
If Not (e.Error Is Nothing) Then
Console.WriteLine("エラー:{0}", e.Error.Message)
Else
If e.Cancelled Then
Console.WriteLine("キャンセルされました。")
Else
Console.WriteLine("ダウンロード完了")
End If
End If
End Sub
' 別スレッドで実行されるメソッド
Shared Sub worker(ByVal i As Object)
top(CType(i, Integer))
End Sub
Shared Sub main()
' 最大同時接続数
ServicePointManager.DefaultConnectionLimit = 2 ' デフォルト
Dim t(9) As Thread
Console.WriteLine("-- 事前ダウンロード開始 --")
top(-1)
' 出力:ダウンロード完了:-1
Console.WriteLine("-- 一斉ダウンロード開始 --")
For i As Integer = 0 To 9
t(i) = New Thread(AddressOf worker)
t(i).Start(i)
Next
' 出力例:
' ダウンロード完了:0
' ダウンロード完了:1
' ダウンロード完了:4
' ダウンロード完了:6
' ダウンロード完了:9
' ダウンロード完了:8
' ダウンロード完了:3
' ダウンロード完了:5
' ダウンロード完了:7
' ダウンロード完了:2
End Sub
End Class
・・・なのですがどうしても分からない部分があり、その部分をご教授願います。
14,16,29,31行目の
'14,29行目
AddressOf downloadClient_DownloadProgressChanged
'16,31行目
AddressOf downloadClient_DownloadFileCompleted
がエラーになってしまいます。
普通のフォームを使用したものではエラーにはならなかったのですが・・・。
重ねてご迷惑をおかけしますが、宜しくお願いします。
今回は、下のコードで
サーバー側にアクセスできなかったり、ファイルが存在しなかったときに、RichTextBox1にerror.rtfを表示させたいのですがうまくいきません。
また同様にファイルが取得出来なかったときに、メッセージボックスを表示する方法を教えて欲しいのです。
どうかご教授お願いします。