6

WinSCPの.NETアセンブリを使用してファイルをアップロードします。 OperationResultBase.Check()次のエラーをスローしています:

WinSCP.SessionRemoteException:転送は正常に終了しましたが、一時転送ファイル'testfile.zip.filepart'の名前をターゲットファイル名'testfile.zip'に変更できませんでした。問題が解決しない場合は、転送再開のサポートをオフにすることをお勧めします。

これは、私が送信しようとしているすべてのzipファイルで発生するようです。違いがある場合、これらはDotNetZipライブラリを使用して作成されたzipファイルです。

私が使用しているコードは、WinSCPドキュメントの例から直接引用したものです。

public void uploadFile(string filePath, string remotePath)
{
    TransferOptions transferOptions = new TransferOptions();
    transferOptions.TransferMode = TransferMode.Binary;
    TransferOperationResult transferResult;
    transferResult = currentSession.PutFiles(filePath, remotePath, false, transferOptions);
    transferResult.Check();
    foreach (TransferEventArgs transfer in transferResult.Transfers)
    {
        Console.WriteLine("Upload of {0} succeeded", transfer.FileName);
    }
}

WinSCPフォーラムでの議論は、アセンブリが転送再開サポートのプログラムによる制御をまだ許可していないことを示しています。これに対する回避策はありますか?

4

3 に答える 3

4

ファイルがアップロードされる宛先サーバーのファイルシステムで、ファイルの変更権限が許可されていないようです。これにより、完全なファイルがアップロードされ、転送の進行中に使用された一時ファイル名でファイル システムに書き込まれたにもかかわらず、アップロードの最後にファイルの名前変更が失敗する可能性があります。移行先サーバーへの管理アクセス権がない場合は、移行先サーバーに既に存在するファイルの名前を変更してテストできます。それも失敗する場合は、それを機能させるために、宛先サーバーで適切な権限を変更する必要があります。

于 2012-06-01T22:40:22.140 に答える
1

サーバーから返された根本原因を含む完全なエラーメッセージを含めると役立ちます。

私の推測では、サーバー側でウイルス対策アプリケーション (または類似のアプリケーション) が実行されていると思われます。ウイルス対策アプリケーションは、アップロードが完了するとファイルをチェックします。これは、アップロードの完了後にファイルの名前を変更しようとする WinSCP の試みと競合します。この問題は、.ZIP アーカイブでより頻繁に発生する傾向があります。これは、サイズが大きくなる傾向があるか、単にチェックの前に解凍する必要がある (時間がかかるため) ためです。

いずれにせよ、 を使用して一時ファイル名への転送を無効にすることができますTransferOptions.ResumeSupport

「転送は正常に終了しましたが、一時転送ファイル ... をターゲット ファイル名に変更できませんでした ...」というエラー メッセージのドキュメントも参照してください。

于 2014-04-22T15:02:45.307 に答える