###前提
https://teratail.com/questions/73593
前回こちらで質問をさせて頂き、接続の判定や、その他エラーの判定処理を行うことができました。
※WinSCPでSFTP接続時のファイル転送結果を取得し処理判定に利用したいという質問でした。
ここからさらに、取得したエラーをエラーの内容によって処理を分けたいと考えております。
###現状
ファイル転送前に、ファイルが保存されているディレクトリから
転送用のディレクトリに移動させたいと考え以下のソースを追加しました。
$transferResult = $session.MoveFile("<移動元ディレクトリ/*.pdf>","移動先ディレクトリ/")
この時、移動元ディレクトリに該当のファイルが存在しない場合、
Exceptionを出力すると以下のように表示されます。
エラーWinSCP.SessionRemoteException: 移動元ディレクトリ/*.pdf not found. 場所 WinSCP.Session.MoveFile(String sourcePath, String targetPath) 場所 MoveFile(Object , Object[] ) 場所 System.Management.Automation.MethodInformation.Invoke(Object target, Object[] arguments) 場所 System.Management.Automation.DotNetAdapter.AuxiliaryMethodInvoke(Object target, Object[] arguments, MethodInformation methodInformation, Object[] originalArguments)
ですので、
「MoveFileを実行する前にファイルをがあるか存在を確認し、
あれば処理の実行へ、なければエラー判定用の変数にその旨をセットし処理判定に利用する。」
と考えました。
###試したこと
https://winscp.net/eng/docs/library_session#methods
ここのメソッド一覧にFileExistsというメソッドがあり、
これを使うことによりファイルの存在を確認できるのですが、
Parameters:string path Full path to remote file.1) … 1) Note that you cannot use wildcards here.
MoveFileと異なり、ワイルドカードの表現を指定できず、フルパスのみしか対応しておりませんでした。
ディレクトリ名は固定ですが、
その中の取得したいファイルは複数あるまた、ファイル名が固定ではない為、
フルパスの指定が難しいと判断しました。
###応急手段
エラーコードを取得したり、その他メソッドがないかなどいろいろと調べてみましたが、
めぼしいものが見当たらず、応急手段として以下のように対応しました。
$error_info = $_.Exception | Out-String -Stream if ($error_info.IndexOf("not found") -ne -1) { $result_code = 2 # ファイルが存在しないため処理を中止(エラー出力はしない) } else { $result_code = 99 # エラー処理 }
記載のとおり、Exceptionの文字列の中に"not found"があるかどうかを判定させております。
###質問したいこと
上記の方法ではかなり不安なため、
ファイルが存在するかどうかの判定方法が
他にないかご教授頂ければ幸いです。
あなたの回答
tips
プレビュー