1

私の問題は、アップロードしたファイルをftpサーバーで表示すると、内容がなく、空であるということです。なぜこれが起こっているのですか?コードに何かが欠けているのですか?

if (File.Exists("main.xml"))
{
    using (Stream stream = new MemoryStream())
    {
        stream.Position = 0;
        stream.Seek(0, SeekOrigin.Begin);

        string uri = String.Format("ftp://{0}/{1}/{2}", "host", "wwwroot", "main.xml");

        FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

        request.Credentials = new NetworkCredential("user", "pass");
        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.KeepAlive = false;
        request.UseBinary = true;
        request.UsePassive = true;
        request.ContentLength = stream.Length;
        request.EnableSsl = false;

        int bufferLength = 2048;
        byte[] buffer = new byte[bufferLength];
        int contentLength;

        Stream ftpStream = request.GetRequestStream();
        contentLength = stream.Read(buffer, 0, bufferLength);
        while (contentLength != 0)
        {
            ftpStream.Write(buffer, 0, contentLength);
            contentLength = stream.Read(buffer, 0, bufferLength);
        }

        ftpStream.Flush();
        ftpStream.Close();
    }
}
else
{
    MessageBox.Show("No file found.");
}

しかし、このコード行を上に挿入しようとすると

MessageBox.Show(XDocument.Load("main.xml").ToString());

それは出力を持っています、

しかし、ブレークポイントを設定しようとすると、到達したときにブレークポイントにwhile (contentLength != 0)入らない

4

2 に答える 2

1

書き込んでいるファイルが常に空の場合は、実際にはファイルを取得していないように見えます。while (contentLength != 0)最初に確認するのは、そもそもそれが入力されているかどうかを確認することです。

更新:また、ジョンが指摘したように、リクエストストリームの割り当ては悪いです!

于 2013-02-11T03:18:09.663 に答える
1

編集

OKこれは本来あるべき姿です

using (Stream stream = File.Open("main.xml", FileMode.Open))
于 2013-02-11T03:18:11.380 に答える