環境はVB.net 2003です。
http://www.gotdotnet.com/japan/student/column/firststep/firststep19.aspx
のサイトに載っているC#をVBに書き直しています。
自分なりに直したつもりですが、
最後のほうで
Option Strict OnでStringからDoubleへの暗黙的な変換はできません
というエラーがでてビルドができません。
本人はstringからstringへの書き込みをしてるつもりなんですがエラーが
でるので無事ビルドするにはどこを直したいいか教えていただけませんか。
どこが悪いのかわからないので全ソース載せること失礼かと思いますが
よろしくお願いします。
Option Strict On
Imports System.Net
Imports System.Text.RegularExpressions
Imports System.Text
Imports System.IO
Private Sub downButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles downButton.Click
Try
Dim downloadurl As String = urlText.Text
Dim filepath As String = filePathText.Text
Dim downloaddirurl As String = downloadurl.Substring(0, downloaddirurl.LastIndexOf("/") + 1)
Dim webClient As WebClient = New WebClient
webClient.DownloadFile(downloadurl, "c:\\temp.html")
'c:\\temp.htmlの内容をcontentsに格納
Dim reader As StreamReader = File.OpenText("c:\\temp.html")
Dim contents As String = reader.ReadToEnd()
reader.Close()
'contentsからリンク情報のリストを抽出
Dim regex As Regex = New Regex("<a +href=('|"")[^('|"")]*('|"")*>")
Dim matchcollection As MatchCollection = Regex.Matches(contents)
'各リンク情報からURLを抽出し、ダウンロードする
Dim i As Integer
For i = 0 To matchcollection.Count
Dim urlregex As Regex = New Regex("('|"")[^('|"")]*('|"")")
Dim match As Match = urlregex.Match(matchcollection(i).Value)
Dim url As String = match.Value.Substring(1, match.Value.Length - 2)
If url.IndexOf("http://") <> 0 Then
url = downloaddirurl + url
'抽出されたリンク情報をテキストボックスに表示
urlListText.Text += url + "vbCrLf"
'ファイル名を取得
Dim filenamestart As Integer = url.LastIndexOf("/") + 1
Dim filenamelength As Integer = url.Length - filenamestart
Dim filename As String = url.Substring(filenamestart, filenamelength)
’**************
'ダウンロード先ファイルパスを作成
Dim downloadpath As String = filepath + "\\" + "down"+filenamestart
’エラー発生箇所
’***************
Try
webClient.DownloadFile(url, downloadpath)
Catch ex As Exception
End Try
End If
Next
Catch ex As Exception
End Try
End Sub
filenamestart
が
Integer
だからですね
レスありがとうございます。
前の文字ばっかり気をとられて一番後ろの文字に注意が要ってませんでした。
文字列の連結は+でなく&のようなんで
Dim downloadpath As String = filepath & "\\" & "down"
に直したところ、ビルドはできたんですが動きませんでした。
よろしくお願いします。
すいません。解決してません
編集 削除> webClient.DownloadFile(downloadurl, "c:\\temp.html")
> Dim downloadpath As String = filepath & "\\" & "down"
VB.NETって\はエスケープしないといけないのでしたっけ?
…ところで、何で \ マークを2つ重ねてるの?
編集 削除被った。orz
VB.NETでは、「\」を重ねる必要はないです。
「"」を埋め込むなら、「""」と重ねる必要があるけど。
> C#をVBに書き直しています。
とありましたね。前回の質問のときも、
エスケープを間違えていましたね。
C# → VB にする上でどんな違いがあるのかを明確にしたほうが良いでしょう。
レスありがとうございます。
「¥」については言い訳になるんですけど、(おそらく)つけなくても大丈夫だろうとはおもったんですが、あってもファイル名が\tempになるだけで問題ないと思ってました。
今やってみるとファイル名に¥は使えませんと出ました。
試してみずに思い込んでました。
ありがとうございます。
>Dim downloaddirurl As String = downloadurl.Substring(0, downloaddirurl.LastIndexOf("/") + 1)
は
Dim downloaddirurl As String = downloadurl.Substring(0, downloadurl.LastIndexOf("/") + 1)
でしょう。
>If url.IndexOf("http://") <> 0 Then
> url = downloaddirurl + url
>・
>End If
は
If url.IndexOf("http://") <> 0 Then
url = downloaddirurl + url
End If
でしょう、C#のIfはすぐしたの行のみ。
#これでそれらしきファイルは吐き出すが完全ではない。
C#のもとのコードも何かおかしそうです。
>String filename = url.Substring(filenamestart, filenamelength);]
この filenameなんかどこにも使ってないし。
それと全体をTryで囲んで構文エラーまで例外を投げるような、Tryの使い方は推奨できないでしょう。
レスありがとうございます。
おかげさまで動きました!!
URLリストが出たときはマジで感動です!!
初心者の質問ばかりしてしまいましたが無事解決できました。
>String filename = url.Substring(filenamestart, filenamelength);]
いわれてみると使われてないですね・・。
偉い先生の書いたソースだからと鵜呑みにせずにドンドンいろんなコードを読み書きして勉強していきたいと思います。
ありがとうございました。