DOBON.NETプログラミング道掲示板

No34274 の記事


■34274 / )  Re[1]: FILE.COPYでIOExceptionエラーが出る
□投稿者/ 魔界の仮面弁士 大御所(1231回)-(2019/07/03(Wed) 12:38:05)
  • アイコンNo34273に返信(オフィス・ケイさんの記事)
    > File.COYを使用しているのですが、稀にシステムエラー(IOException)で処理が落ちるのです。
    稀に、ということは、時間をおいてリトライすると再現しなくなるということでしょうか。


    > 原因として何が考えられるのでしょうか?
    > ネットワークは無線LANで接続しています。
    共有フォルダー側でウイルススキャンが走って阻害されたとか?

    受信側(共有フォルダー側)で監査ログを有効にして、
    ファイル送出側での通信ログと照らし合わせてみるのは如何でしょうか。

    通信障害(何かしらのタイムアウトとか)だと、ログ判定では難しいですが…。
    ※Wi-Fi のスリープ復帰が間に合ってなかったとか、輻輳・瞬断とか



    > ----- 参考ソース ------

    File.Copy がエラー箇所なのだとしたら、.NET Compact Framework 3.5 の実装は
    こんな感じになっていました。

    IOException が生成されるパターンは、4 / 9 / 10 / 13 の場所ですね。

    10 は、メッセージリソースが存在している場合には
    IO_SharingViolation_File のメッセージリソースが表示されます。
    ウイルススキャンが原因だと、ありえそうな話かもしれません。

    それ以外の 4 / 9 / 13 の場所の IOException では、
    Message 引数の指定が無かったので、既定のメッセージがそのまま出力されるはず。



    ==========
    If いずれかのパスが Nothing Then
     ★1★ [&H80004003] ArgumentNullException
    ElseIf いずれかのパスが空文字列 Then
     ★2★ [&H80070057] ArgumentException
    End If
    sourceFullPath = sourceFileNameをフルパス変換
    destFullPath = destFileNameをフルパス変換
    Dim errorCode As Integer = CopyFile(sourceFileName, destFileName, Not overwrite) '※API呼び出し
    If errorCode <> 0 Then
     If sourceFullPath なファイルが存在しない Then
      ★3★ [&H80001000] FileNotFoundException 'sourceFileName
     ElseIf destFullPath なファイルが存在している Then
       'overwrite := False の状態で呼ばれた時限定
      ★4★ [&H80131620] IOException
     Else 'ここからは destFileName 系のエラー
      If errorCode <= &H80001001 Then
       Select Case errorCode
       Case ERROR_ACCESS_DENIED '&H80000004
        ★5★ [&H80070005] UnauthorizedAccessException
       Case &H80000008
        ★6★ [&H80131515] NotSupportedException
       Case ERROR_FILE_NOT_FOUND '&H80001000
        ★7★ [&H80070002] FileNotFoundException 'FileNotFound_FileName := destFileName
       Case &H80001001
        ★8★ [&H80070003] DirectoryNotFoundException 'PathNotFound_Path := destFileName
       End Select
      Else
       Select Case errorCode
       Case &H80001006
        ★9★ [&H80131620] IOException
       Case &H80001007
        Exit Select
       Case &H80001008
        ★10★ [&H80131620] IOException 'IO_SharingViolation_File := destFileName
       Case &H80003000
        ★11★ [&H80070057] ArgumentException
       Case 206
        ★12★ [&H800700CE] PathTooLongException
       End Select
      End If
      ★13★ [&H80131620] IOException
     End If
    End If
    Return '☆ここまでこれたら正常終了☆
違反を報告
返信 削除キー/


Mode/  Pass/


- Child Tree -