Windows.Formsでローカルではなくサーバーにファイルをコピーしております。
FTPでも良かったのですが、コピーできたのでコピーにしてます。
FTPのやり方もいまいち分からなかったので。。。
っで、今回行いたい処理は、
コピーに失敗した場合。
例:コピー先のサーバーが落ちていてコピーできなかったなど
出来ればコピーに失敗した場合と
サーバーが落ちているかネットワークに繋がっていないなど通信部分で
エラーメッセージを変えたいのですが、そのようなことは可能なのでしょうか??
エラー処理については全く分かっていないので、
これを機に色々と勉強したいと思います。
どなたかご教授をお願い致します。
ちなみにWinXPのVB.Netでサーバー側はWin2000です。
多分・・・サーバー側のフォルダ等を共有化して、ローカル側が
仮想ドライブとしてマウントした形だと思いますが・・・
FileInfo、DirectoryInfoとかのクラスを使って、そのドライブ
の中(フィルダの中)を検索動作させ、ファイルのあるなしを
確認してやればよいかと・・・コピー動作も、FileInfoでできま
すし・・・
ですが、要注意!
長時間その仮想ドライブにアクセスしないと、ローカル側の仮想
ドライブに赤バッテンがつきます。
その状態でコピー動作を行いますと、エラーしないで終了したり
します。無理やりDirectoryInfoでファイル情報を取得しても回復
しない場合があります。作業者が、エクスプローラやマイコンピュ
ータから、そのドライブアイコンをクリックして、開けば回復する
(再接続)するのですが・・・これをプログラム的に行うことが、
私にはできなかったので、コピー動作を必要とするたびに、毎回、
共有フォルダの共有、仮想ドライブ化、ファイルのコピー、共有
フォルダの解除と言う動作を繰り返し、必ずサーバーと接続が正常
になるようにしています。
共有フォルダの関係のAPIでは・・・
' ネットワークリソースに接続する関数の宣言
Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (ByVal lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long
' 「ネットワークドライブの切断」ダイアログを表示する関数の宣言
Declare Function WNetDisconnectDialog1 Lib "mpr.dll" Alias "WNetDisconnectDialog1A" (ByVal lpConnectDlgStruc As DISCDLGSTRUCT) As Long
を使いました。
ご参考までに・・・
以上。
岡田 之仁さん。お久しぶりです。
先日はお世話になりました。
サーバー側のコピー先フォルダは確かに共有化されてます。
これを前提にコピーを行っていますが、コピーするファイルは
1〜255のどれかの数字.htmlのパターンのファイルです。
なのでファイルが存在するかどうかでは
エラーかどうかの判断基準になりません。
更新日時とかを見るしかないですかね?それはそれで問題ありますよね。
あと
Dim myWriter As StreamWriter
myWriter = New StreamWriter(IndexPath1)
myWriter.Write(indexHtm)
myWriter.Close()
(IndexPathはサーバー上のhtmlファイルを指してます。)
でHtmlをを作成してますが・・・危険ですか??
そういう意味であれば・・・
FileInfo で、仮想ドライブでのファイルのフルパスを
渡して、ファイル情報を取得して自分で判断した方が
いいとは思います。
Dim fiSrc As FileInfo
Dim fiDst As FileInfo
Dim szSrcPath As String
Dim szDstPath As String
Dim bRet As Boolean
szSrcPath = "xxxxx" ' ローカル側
szDstPath = "yyyyy" ' サーバー側
bRet = False
fiSrc = New FileInfo(szSrcPath)
fiDst = New FileInfo(szDstPath)
If fiSrc.Exists Then
If fiDst.Exists Then
If fiSrc.LastAccessTime > fiDst.LastAccessTime Then
' ローカル側が最新の場合
bRet = True
End If
Else
' サーバー側にファイルが無い場合
bRet = True
End If
End If
If bRet Then
' コピーを行う
Try
fiSrc.CopyTo(szDstPath, True)
Catch ex As Exception
Debug.WriteLine("コピー失敗(" + ex.Message + ")")
End Try
End If
こんなんでどうでしょうか・・・
パスの設定はして下さい。
尚、先の長時間アクセスしない場合の処置は、
お考え下さい。
以上。
いつもお世話になっております。
長時間アクセスしない場合の処置なのですが
いまいちよく分からずで。。。
色々と調べてやってみたのですが、これはマイコンピュータには
表示されませんか?されるのなら間違っているんですよね。。。
一応、色々と試してみます。
長時間アクセスしないことはないとは思いますが。。。
ありがとうございました。
ツイート | ![]() |