【问题标题】:SFTP cannot be deleted after having been read using SSH.NET SftpClient.OpenRead使用 SSH.NET SftpClient.OpenRead 读取后无法删除 SFTP
【发布时间】:2021-02-12 15:45:04
【问题描述】:

我正在使用 Renci.SshNet 连接到 SFTP 并逐个遍历文件夹中存在的文件,并在我们读取文件后删除。然后我们继续下一个文件。但我观察到我无法删除文件的问题。当我尝试sftp.DeleteFile(item.FullName); 时,它会给出“没有这样的文件” 错误消息。

下面是给出上述问题的示例代码。

using (SftpClient sftp = new SftpClient(con))
{
    sftp.Connect();

    var fileList = sftp.ListDirectory("/Foldername");
    foreach (var item in fileList)
    {
        StringBuilder sb = new StringBuilder();
        using (StringWriter sw = new StringWriter(sb))
        using (XmlTextWriter writer = new XmlTextWriter(sw))
        //reading files from MFT
        using (XmlReader reader = XmlTextReader.Create(sftp.OpenRead(item.FullName)))
        {
            while (reader.Read())
            {
                if (reader.LocalName == "Employee" && reader.IsStartElement())
                {
                    writer.WriteStartElement(
                        reader.Prefix, reader.LocalName, reader.NamespaceURI);
                    writer.WriteAttributes(reader, true);
                }
            }
        }
        sb = null;
        // This line fails and I get "no such file" error message.
        sftp.DeleteFile(item.FullName); 
    }

    sftp.Disconnect();
}

但如果我在读取文件后断开连接并再次连接,我可以删除文件。

此解决方法解决了问题:

sftp.Disconnect(); // If I disconnect and connect again, I am able to delete the file
sftp.Connect(); // Connecting again
sftp.DeleteFile(item.FullName); // Now delete file works

【问题讨论】:

    标签: c# ssh sftp ssh.net


    【解决方案1】:

    你没有关闭远程文件流,所以文件被锁定,无法删除。

    试试这个:

    using (var remoteFileStream = sftp.OpenRead(item.FullName))
    using (XmlReader reader = XmlTextReader.Create(remoteFileStream))
    {
        // ...
    }
    

    XmlTextReader 似乎没有处理底层的Stream。见Why is FileStream not closed by XmlReader

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 2023-04-01
      • 2014-07-05
      • 2015-12-28
      • 2020-01-02
      • 1970-01-01
      相关资源
      最近更新 更多