I持ってFTPサーバーからファイルをダウンロードし、次のコード:WebRequest.GetResponseStream私はメモリやネットワークから読んでいますから、私は、ストリームから読み込まれた場合
var req = (FtpWebRequest)WebRequest.Create(ftp_addr + file_path);
req.Credentials = new NetworkCredential(...);
req.Method = WebRequestMethods.Ftp.DownloadFile;
using (var resp = req.GetResponse())
using (var strm = resp.GetResponseStream())
using (var mem_strm = new MemoryStream())
{
//The Web Response stream doesn't support seek, so we have to do a buffered read into a memory stream
byte[] buffer = new byte[2048];
int red_byts = 0;
do
{
red_byts = strm.Read(buffer, 0, 2048);
mem_strm.Write(buffer, 0, red_byts);
}
while (strm.CanRead && red_byts > 0);
//Reset the stream to position 0 for reading
mem_strm.Position = 0;
//Now I've got a mem stream that I can use
}
生ストリームがGetResponseStream」から返されたので、 "読んだり、探したりすることができません(それを求めることはできません)。このコードは実際には、ファイルの次のチャンクの要求をFTPサーバーに実行して、それをメモリにコピーしているようです。私は正しいのですか、GetResponseStreamができるときに応答全体がダウンロードされていますか?
私が知りたいのは、FTPダウンロードを使用する非同期メソッドでReadAsync呼び出しを正しく待機できることです。私の直感は、行を変更する私に語った:
red_byts = strm.Read(...);
red_byts = await strm.ReadAsync(...);
にWebRequest.GetResponseStreamのドキュメントは指定していないように、またFtpWebRequest.GetResponseStreamのマニュアルを行います。