2011-07-11 10 views
1

私はStreamWriterを使用して動的ファイルを生成し、MemoryStreamに保持しています。 rebex sftpを使用してファイルを保存するまでは、すべてが問題なく表示されます。rebex sftpで動的に作成されたMemoryStreamを保存できません

彼らは自分のサイトに与える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を有効にする以上のことをする必要がありますか?

答えて

4

MemoryStreamに書き込んだ後、ストリームは最後に配置されます。 PutFileメソッドは、現在の位置から最後まで読み取ります。それはちょうど0バイトです。

あなたがPUTFILEに渡す前に先頭にストリームを配置する必要があります。

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

また、MemoryStreamをを配置からのStreamWriterを防ぐために必要がある場合があります。

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

完璧。ありがとうございました。 –

関連する問題