不会删除上传的文件

问题描述 投票:0回答:1

我的脚本很简单

   public void transferfiles(String modus)
   {
        try
        {
            // Setup session options
            SessionOptions sessionOptions = new SessionOptions
            {
                Protocol = Protocol.Sftp,
                HostName = conHostName,
                UserName = conUserName,
                Password = conPasswort,
                SshHostKeyFingerprint = conSshHostKeyFingerprint
            };

            using (Session session = new Session())
            {
                session.Open(sessionOptions);

                TransferOptions transferOptions = new TransferOptions();
                transferOptions.TransferMode = TransferMode.Binary;

                TransferOperationResult transferResult;

                if(modus == "download")
                {
                    transferResult = session.GetFiles(remoteDirectoryDownload, localDirectoryDownload, false, transferOptions);
                } 
                else
                {
                    transferResult = session.PutFiles(localDirectoryUpload, remoteDirectoryUpload, false, transferOptions);
                }

                transferResult.Check();

                foreach (TransferEventArgs transfer in transferResult.Transfers)
                {
                    try
                    {
                        Console.WriteLine("Delete File: {0}", transfer.FileName);
                        session.RemoveFiles(transfer.FileName);
                    }
                    catch (Exception e)
                    {

                        Console.WriteLine("Error: {0}", e);
                    }
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Error: {0}", e);
        }
    }
}

当我执行下载时,来自远程主机的文件将在远程主机上传输并删除。但是,当我从本地文件夹进行上传时,可以进行上传,但是不会删除本地文件夹中的文件。我没有错。

我从我的用户开始。我是此文件的所有者,可以手动将其删除。

此外,当我在“ session.RemoveFiles”上设置断点时,将显示具有正确本地路径的正确文件。

也许您对我有一个想法,我的失败在哪里。

c# .net sftp winscp winscp-net
1个回答
0
投票

Session.RemoveFiles仅删除remote个文件。它无法删除local文件。要删除local文件,请使用标准的.NET Session.RemoveFiles

尽管更容易(更好)是将File.Delete传递给File.Delete / trueremove(第3个)参数。

即使对于下载,它也比您当前的代码更好,因为它会删除所有成功下载的文件。尽管您的当前代码不会删除任何文件,但是如果仅部分文件被成功下载。

此外,您正在使用默认的Session.GetFiles,因此该代码是多余的。

最后,您可以将代码简化为:

Session.GetFiles
© www.soinside.com 2019 - 2024. All rights reserved.