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

时间:2011-07-11 22:49:53

标签: 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才能使其正常工作吗?

1 个答案:

答案 0 :(得分:4)

写入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");
相关问题