Невозможно сохранить динамически созданный MemoryStream с помощью rebex sftp
Я использую StreamWriter
создать динамический файл и удерживая его в MemoryStream
, Кажется, все в порядке, пока я не сохраню файл, используя rebex sftp.
Пример, который они приводят на своем сайте, работает нормально:
// 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 ответ
Решение
После записи в 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");