невозможно сохранить динамически созданный MemoryStream с помощью rebex sftp - PullRequest
1 голос
/ 12 июля 2011

Я использую 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 Ответ

4 голосов
/ 12 июля 2011

После записи в 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");
...