私はsftpがファイルをダウンさせるコードを持っています。私はそれが完了したかどうかテストするログを読んでいます。私はそれがサイズが0kbより大きいかどうかを調べるためにファイルをテストします。これらのステップが完了したら、filesystemobjectを使用してファイルの名前を変更しようとします。VBA FTP:許可が拒否された後にファイル名を変更
'Wait for FTP to complete
Do While Not (bSFTPDownloadComplete(strLogFile))
Sleep 2000
Loop
'Wait for file to not be 0KB
Do Until FileSize(strFile) > 0
Sleep 2000
Loop
'Move file to filename
RenameFile strFile, strNewFile
bSFTPDownloadComplete
は「合計ファイルがダウンロード:1」の内容とテストを読んでいる:以下のコードの抽出物(私は今まで、ここで一度に1ファイルをダウンロードしています)、これは正常に動作し、私は必要に応じて詳細に行くことができますが、私は本当にこれが問題だとは思わない。
Function FileSize(strPath As String) As Double
Dim fso As FileSystemObject
FileSize = 0
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(strPath) Then
FileSize = fso.GetFile(strPath).size
End If
Set fso = Nothing
End Function
が
でrenameFileは以下の通りである:次のよう
ファイルサイズである
Function RenameFile(strOrig As String, strNew As String)
Dim fso As FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
fso.MoveFile strOrig, strNew
Set fso = Nothing
End Function
オン非常に大きなファイルfso.MoveFile
行でRun-Time 70 Permission Deniedエラーが発生します。 ftpログで完了し、ファイルのサイズが0より大きいというテストに合格しました。
もし私が数秒待っていれば、それでも問題はなく、コードは続行できます。私は本当に大きなファイルの潜在的可能性は、それはまだ壊れて、私は時間を無駄にすることを意味するので、数秒間スリープ状態にしたくない。
ファイルが別のプロセスでまだ使用されているかどうかをテストする方法はありますか?もし私が進むことができる唯一の方法は、err = 70の場合にスリープして再開するエラーハンドラを関数に入れることですが、これは私の頭には理想的ではないようです。
すべてのアイデアを喜んで受け取ります。
ファイルを実際にダウンロードするために何を使用していますか?あなたはまだ実際のファイルのパーミッションをチェックしましたか? – Comintern
私はCoreFTP via Shellコマンドを使用しています。それは 'strFTP =" C:¥Program Files¥CoreFTP¥coreftp.exe -s -delsrc -log C:¥Temp¥ftplog.txt -O -d sftp:// user:pwd @ server:port/filepath -pになります。 C:\ temp \ "(私はその文字列からいくつかのビットを置き換えた)、そして、' VBA.Shell strFTP、vbMinimizedNoFocus'。 –
ウェブサイトから: "ビルド1437でcorecmd.exeというユーティリティが追加され、ブロック転送が可能になりました。転送が完了するまで転送がブロックされる同じコマンドラインパラメータを使用してください。"ブロック転送または非同期転送を使用していますか? – Comintern