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

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

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

Re[4]: エラー時のリトライ処理について


(過去ログ 117 を表示中)

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

■68961 / inTopicNo.1)  エラー時のリトライ処理について
  
□投稿者/ たくや (7回)-(2013/11/26(Tue) 18:21:33)

分類:[.NET 全般] 

質問致します。
Microsoft Visual Basic 2010 Express を使用しています。

CSVのファイルを別のシステムで出力されており、このファイルをコピーしたいのです。
ファイルが書出し中の場合を判断して、書出し中の場合は5秒間待機してリトライするように致しました。
書出し中は問題なく動作しましたが、正常な場合も3回トライしてしまいます。
正常な場合には、リトライしないようにするにはどうすれば宜しいでしょうか。
どなたかご教授お願いします。


   'ファイルが使用中か確認の為ファイルをリネーム
For i As Integer = 1 To 3
Try
System.IO.File.Move("D:\0000.csv", "D:\1111.csv") 'ファイルリネーム
System.IO.File.Move("D:\1111.csv", "D:\0000.csv") 'ファイルリネーム
System.IO.File.Copy("D:\0000.csv", "C:\0000.csv", True) 'ファイルのコピー true上書き設定

Catch
System.Threading.Thread.Sleep(5000) '5秒間待機
End Try
Next

    これ以降にも別の処理が続きます
引用返信 編集キー/
■68962 / inTopicNo.2)  Re[1]: エラー時のリトライ処理について
□投稿者/ Hongliang (130回)-(2013/11/26(Tue) 18:26:08)
正常に終了した時点で、ループから脱出すればいいんではないでしょうか。
http://msdn.microsoft.com/ja-jp/library/5z06z1kb.aspx

最初のMoveには成功したけど二回目のMoveには失敗したときとかは考慮しなくても大丈夫ですか?
あとこのままだと3回とも失敗した場合でも普通に処理が継続しちゃうけどいいのかな。
引用返信 編集キー/
■68980 / inTopicNo.3)  Re[1]: エラー時のリトライ処理について
□投稿者/ shu (431回)-(2013/11/27(Wed) 08:05:00)
No68961 (たくや さん) に返信

Catchの前でExit Forすればよいと思います。


質問の内容とは少し違いますが
D:\0000.csv => D:\1111.csv 移動
をリトライ実行して

D:\1111.csv => C:\0000.csv コピー
をリトライ実行して

D:\1111.csv => D:\0000.csv 移動
をリトライ実行

とした方がよいのではないでしょうか?
引用返信 編集キー/
■68982 / inTopicNo.4)  Re[2]: エラー時のリトライ処理について
□投稿者/ たくや (8回)-(2013/11/27(Wed) 09:22:18)
Hongliang様、shu様ご回答ありがとうございます。
Exit For で無事成功時のループを脱出できました。

D:\0000.csv => D:\1111.csv 移動
をリトライ実行して

D:\1111.csv => C:\0000.csv コピー
をリトライ実行して

のリネームでは無く、移動・コピーとした方がよい理由が初心者でわかりません。
教えて頂けたら勉強になります。
引用返信 編集キー/
■68984 / inTopicNo.5)  Re[3]: エラー時のリトライ処理について
□投稿者/ shu (433回)-(2013/11/27(Wed) 09:59:53)
No68982 (たくや さん) に返信
> Hongliang様、shu様ご回答ありがとうございます。
> Exit For で無事成功時のループを脱出できました。
>
> D:\0000.csv => D:\1111.csv 移動
> をリトライ実行して
>
> D:\1111.csv => C:\0000.csv コピー
> をリトライ実行して
>
> のリネームでは無く、移動・コピーとした方がよい理由が初心者でわかりません。
> 教えて頂けたら勉強になります。

今回の処理手順からしてD:\0000.csvは使用されている可能性が高いものと思われます。
なのでD:\1111.csvに変更後すぐに戻してしまうとまた使用されてしまうのではないかと
考えました。D:\1111.csvも使用される可能性があるのならファイル名を考え直した方がよいです。
移動というのはmoveメソッドなので移動とかいただけで同じドライブであれば
リネームになるのでそこは気にしなくてよいです。


引用返信 編集キー/
■68987 / inTopicNo.6)  Re[4]: エラー時のリトライ処理について
□投稿者/ たくや (9回)-(2013/11/27(Wed) 13:20:45)
勉強になりました。
ありがとうございます。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -