FTPにてファイルをバックアップするには?

解決


MM  2006-07-05 19:52:29  No: 95930

現在、APIにてサーバにファイルをバックアップするプログラムを作っています。

ret = FtpRenameFile(hFTP, "/FileName", "/FileName" & Format(Now, "yymmdd"))
ret = FtpPutFile(hFTP, App.Path & "\FileName" & vbNullChar, "/FileName" & vbNullChar, FTP_TRANSFER_TYPE_BINARY, 0&)

というように、サーバ上のファイルは日付をつけて退避したのち、同名のファイルをプットしています。が、この方法だとFtpPutFileに失敗した時、サーバ上には日付つきのバックアップファイルしかなくFileNameという本体がなくなってしまいます。
失敗した時には、FileCopy "/FileName" & Format(Now, "yymmdd"), "/FileName" のような感じで退避したファイルを戻したいのですが、そのようなコマンドもなく行き詰っています。
どなたかお力添えをお願いします。


ガッ  2006-07-05 20:44:45  No: 95931

とりあえず、rfcおいておきますね:
http://www.mars.dti.ne.jp/~torao/rfc/rfc959-ja.txt


我龍院忠太  2006-07-06 03:27:27  No: 95932

FtpRenameFileが成功して、FtpPutFileが失敗する状況は、送り側のファイルが無い場合や、
接続が途中で切れた場合が考えられますがInternetGetLastResponseInfoでエラーの内容を
判断して対応するしかないのでは。
接続が切れて再接続を試みて接続された場合は、再度ファイルをPutすれば良いし、
接続できない場合はいずれにしろ何も出来ない訳で・・・
送り側のファイルが無い場合は、FtrRenameFileで名前を変えたファイルを
元の名前に戻すだけであると思いますが。
どうしてもファイルをコピーしたい場合は、コピーしたいファイルを一度Getして
名前を変えてPutすれば良いわけで、特に行き詰まるところでは無い気がしますが。


MM  2006-07-06 18:51:29  No: 95933

ご回答ありがとうございます。
ご指摘の通り、送り側のファイルが無い場合です。
ファイルが大きいのでコピーしたいファイルを一度Getして名前を変えてPutするというより、
コマンドとか、同等のロジックでなんとかならないかと思いましたが、いいのが思いつかずに行き詰っていました。

ret = FtpRenameFile(hFTP, "/FileName", "/FileName1")
ret = FtpPutFile(hFTP, App.Path & "\FileName" & vbNullChar, "/FileName" & vbNullChar, FTP_TRANSFER_TYPE_BINARY, 0&)
成功時
ret = FtpRenameFile(hFTP, "/FileName1", "/FileName" & Format(Now, "yymmdd"))
失敗時
ret = FtpRenameFile(hFTP, "/FileName1", "/FileName")

という感じでいこうと思います。ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加