c# - 无法使用 rebex sftp 保存动态创建的 MemoryStream

标签 c# sftp rebex

我正在使用 StreamWriter 生成动态文件并将其保存在 MemoryStream 中。在我使用 rebex sftp 保存文件之前,一切似乎都很好.

example他们在他们的网站上提供的效果很好:

// upload a text using a MemoryStream 
string message = "Hello from Rebex FTP for .NET!";
byte[] data = System.Text.Encoding.Default.GetBytes(message);
System.IO.MemoryStream ms = new System.IO.MemoryStream(data);
client.PutFile(ms, "message.txt");

但是下面的代码没有:

using (var stream = new MemoryStream())
{
    using (var writer = new StreamWriter(stream))
    {
        writer.AutoFlush = true;
        writer.Write("test");
    } 
    client.PutFile(stream, "test.txt");
}

文件“test.txt”已保存,但它是空的。我需要做的不仅仅是启用 AutoFlush 才能让它工作吗?

最佳答案

写入 MemoryStream 后,流位于末尾。 PutFile 方法从当前位置读取到末尾。那正好是 0 个字节。

在将流传递给 PutFile 之前,您需要将其定位在开头:

    ...
}
stream.Seek(0, SeekOrigin.Begin);
client.PutFile(stream, "test.txt");

您可能还需要阻止 StreamWriter 处理 MemoryStream:

var writer = new StreamWriter(stream);
writer.Write("test");
writer.Flush();
stream.Seek(0, SeekOrigin.Begin);
client.PutFile(stream, "test.txt");

关于c# - 无法使用 rebex sftp 保存动态创建的 MemoryStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6657612/

相关文章:

java - 使用双因素身份验证的 JSCH SFTP 登录

python - 使用 Python 从 SFTP 服务器下载超过 5 天的文件

c# - WinSCP SFTP - .tmp 进程无法访问文件

c# - C# : Permission denied on PutFile 中的 Rebex SFTP 错误

c# - 无法从一组表达式创建复合表达式 <Func<string, bool>>

c# - C# 中与 DateTime 对象的字符串连接 : why is my code legal?

c# - .Net Core 3.1 HttpClient headers.TryAddWithoutValidation 不起作用

c# - 'Microsoft.Owin' 上的 FileLoadException