vb.netで開発しています。
以下のソースはFTPでtxtファイルを外部ホスティングサーバーにアップロードしている箇所です。
Private Function UpRoad(ByVal Flnm As String) As Boolean
Dim s As Integer
'Err数
Dim Int_Err As Integer = 0
For s = 0 To 2
' アップロードするファイル()
Dim upFile As String = "C:\HighwayMail\SendData\Data\" & Flnm
'アップロード先のURI
Dim u As New Uri(ftpad & "/data/" & Flnm)
'FtpWebRequestの作成
Dim ftpReq As System.Net.FtpWebRequest = _
CType(System.Net.WebRequest.Create(u), System.Net.FtpWebRequest)
'ログインユーザー名とパスワードを設定
ftpReq.Credentials = New System.Net.NetworkCredential(usernm, pass)
'MethodにWebRequestMethods.Ftp.UploadFile("STOR")を設定
ftpReq.Method = System.Net.WebRequestMethods.Ftp.UploadFile
'要求の完了後に接続を閉じる
ftpReq.KeepAlive = False
'ASCIIモードで転送する
ftpReq.UseBinary = False
'PASVモードを無効にする
ftpReq.UsePassive = False
Try
'ファイルをアップロードするためのStreamを取得
Dim reqStrm As System.IO.Stream = ftpReq.GetRequestStream()
'アップロードするファイルを開く
Dim fs As New System.IO.FileStream( _
upFile, System.IO.FileMode.Open, System.IO.FileAccess.Read)
'アップロードStreamに書き込む
Dim buffer(1023) As Byte
While True
Dim readSize As Integer = fs.Read(buffer, 0, buffer.Length)
If readSize = 0 Then
Exit While
End If
reqStrm.Write(buffer, 0, readSize)
End While
fs.Close()
reqStrm.Close()
UpRoad = False
Exit For
Catch wex As System.Net.WebException
Dim Err As String = wex.Status
If Err = "2" Then
UpRoad = True
Exit For
Else
Int_Err = Int_Err + 1
If Int_Err = 3 Then
System.IO.File.WriteAllText("C:\UL.log", wex.ToString)
UpRoad = True
Exit For
Else
Exit Try
'10秒間(10000ミリ秒)停止する
System.Threading.Thread.Sleep(10000)
End If
End If
End Try
Next
End Function
「Streamを取得」=>「ファイルを開く」=>「Streamに書き込む」
のような手順でアップロードが行われています。
「Streamを取得」したあとに、サーバー側で接続を切断された場合reqStrm.Close() が実行されないまま、例外処理にはいります。
(つまり接続しっぱなしの状態になってしまいます)
このような例外的なことが起こった場合でも、確実に切断(reqStrm.Close())されるにはどのようにソースを修正したらよろしいでしょうか?
ご教授よろしくお願いします。
No.2ベストアンサー
- 回答日時:
>この部分をTry文の外で宣言すればエラーの解決になる
すりゃいいじゃん(笑)
Private Function UpRoad(ByVal Flnm As String) As Boolean
Dim reqStrm As System.IO.Stream
Dim fs As System.IO.FileStream
Try
'ファイルをアップロードするためのStreamを取得
reqStrm = ftpReq.GetRequestStream()
'アップロードするファイルを開く
fs = New System.IO.FileStream( _
upFile, System.IO.FileMode.Open, System.IO.FileAccess.Read)
…
catch
…
Finally
…
End Try
End Sub
No.1
- 回答日時:
俺自身FTPとかの処理に詳しくないんで,見当違いの事いうかもしれないけど,
質問見て思ったのがTry~Catch~Finally~End Try構文の最後のFinally
http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6to …
この回答への補足
返信ありがとうございます。
Try~EndTryの内容を以下のように修正しました。
Try
'ファイルをアップロードするためのStreamを取得
Dim reqStrm As System.IO.Stream = ftpReq.GetRequestStream()
'アップロードするファイルを開く
Dim fs As New System.IO.FileStream( _
upFile, System.IO.FileMode.Open, System.IO.FileAccess.Read)
'アップロードStreamに書き込む
Dim buffer(1023) As Byte
While True
Dim readSize As Integer = fs.Read(buffer, 0, buffer.Length)
If readSize = 0 Then
Exit While
End If
reqStrm.Write(buffer, 0, readSize)
End While
'**削除ここから
'fs.Close()
'reqStrm.Close()
'**削除ここまで
UpRoad = False
Exit For
Catch wex As System.Net.WebException
Dim Err As String = wex.Status
If Err = "2" Then
UpRoad = True
Exit For
Else
Int_Err = Int_Err + 1
If Int_Err = 3 Then
System.IO.File.WriteAllText("C:\UL.log", wex.ToString)
UpRoad = True
Exit For
Else
Exit Try
'10秒間(10000ミリ秒)停止する
System.Threading.Thread.Sleep(10000)
End If
End If
'**追加ここから
Finally
fs.Close()
reqStrm.Close()
'**追加ここまで
End Try
このように修正した場合
fs,reqStrmが宣言されていませんというエラーが出てしまいます。
Tryの頭部分で宣言した
'ファイルをアップロードするためのStreamを取得
Dim reqStrm As System.IO.Stream = ftpReq.GetRequestStream()
'アップロードするファイルを開く
Dim fs As New System.IO.FileStream( _
upFile, System.IO.FileMode.Open, System.IO.FileAccess.Read)
が変数の有効範囲を超えてしまったのだと理解しています。
この部分をTry文の外で宣言すればエラーの解決になると思うのですが、
どう修正してよいかわかりません。
非常に基本的な問題で申し訳ないのですが、どなたかご教授ください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
onedrive にexcelファイルをア...
-
SmartyでHTMLソースの変更が反...
-
move_uploaded_fileについて
-
アップロードできるファイルサ...
-
PHPで新しいウインドウで開く命...
-
フォントの色を変えるには?
-
PHP8を使うと、大量のWarningが...
-
ImageCreate関数が undefined f...
-
PHP4対応のサーバーではinclude...
-
現在位置より2つ上のディレク...
-
<HTML>~入る タグ が無いから ...
-
これの対応OSを教えて下さい。p...
-
3つ以上の論理積は利用可能なの...
-
PHPからMSSQLへの接続結果の文...
-
CFileDialogの最初のディレクト...
-
PHP MySql ページング
-
form actionで二つ送信先を指定...
-
VBAでJPGサイズ変更
-
拡張子php画像をjpg画像等に変...
-
PHPのif文でその処理を途中で抜...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
onedrive にexcelファイルをア...
-
ファイルアップロードの上限を...
-
youtubeに音声のみのmp4ファイ...
-
one drive のアップロード失敗...
-
FTPClientで転送結果(OKかFAIL)
-
VBでクラウドストレージにア...
-
ftpでアップロードが出来ない
-
アップロードできるファイルサ...
-
ファイルをGET送信でアップロー...
-
FTP接続の例外処理
-
「クラウドにアップロード」」...
-
PHP 画像アップロード 重複防止
-
aws cloud9というものを使って...
-
ファイルアップロードしたもの...
-
ファイルサイズがpost_max_size...
-
csvファイルをMySQLにインポー...
-
ファイルのアップロードで、フ...
-
全角ファイル名をアップロード...
-
携帯からファイルアップロード...
-
SmartyでHTMLソースの変更が反...
おすすめ情報