C# 通过HTTP检索XML并写入文件时出现问题

C# 通过HTTP检索XML并写入文件时出现问题,c#,.net,visual-studio,C#,.net,Visual Studio,我已经编写了一个小的scraper,它旨在通过HTTP打开远程服务器上与PHP脚本的连接,并将在那里找到的一些XML输入到本地文件中 不完全是火箭科学,我知道 下面的代码是完整的刮刀(已清理并匿名) 除了一个小细节之外,这段代码工作得很好,似乎不管XML文件大小(1MB或7MB),生成的XML文件总是在末尾缺少一小部分(600-800个字符) 注意事项: 如果我在Firefox中打开php页面,我会得到完整的文档,没有问题 如果我启动wireshark并运行下面的程序,我会看到整个文档通过网络

我已经编写了一个小的scraper,它旨在通过HTTP打开远程服务器上与PHP脚本的连接,并将在那里找到的一些XML输入到本地文件中

不完全是火箭科学,我知道

下面的代码是完整的刮刀(已清理并匿名)

除了一个小细节之外,这段代码工作得很好,似乎不管XML文件大小(1MB或7MB),生成的XML文件总是在末尾缺少一小部分(600-800个字符)

注意事项:

  • 如果我在Firefox中打开php页面,我会得到完整的文档,没有问题

  • 如果我启动wireshark并运行下面的程序,我会看到整个文档通过网络传输,但不会写入文件

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;

namespace myNameSpace
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("BEGIN TRANSMISSION\n");
                writeXMLtoFile();
            Console.Write("END TRANSMISSION\n");
        }


        public static void writeXMLtoFile()
        {
            String url = "http://somevalidurl.com/dataPage.php?lotsofpars=true";
            TextWriter tw = new StreamWriter("xml\\myFile.xml");
            tw.Write(ScreenScrape(url));
            Console.Write(" ... DONE\n");
            tw.Close();
        }
        public static string ScreenScrape(string url)
        {
            System.Net.WebRequest request = System.Net.WebRequest.Create(url);
            using (System.Net.WebResponse response = request.GetResponse())
            {
                using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()))
                {
                    return reader.ReadToEnd();

                }
            }
        }
    }
}

我应该使用不同的书写器吗?我尝试了TextWriter和StreamWriter,达到了相同的效果

冰岛的亲切问候

Gzur

试试:

XmlDocument doc = new XmlDocument();
doc.Load(url);
doc.Save(filename);

这真的很简单(显然有一些错误处理)。Net框架应该为您做所有事情。大约一个月前,当我在XmlDocument;)上阅读帮助文件时,我试图做同样的事情,但我还是一败涂地

简单到不在StreamWriter上调用Flush(),但为什么要让自己的生活变得艰难呢?将整个writeXMLtoFile函数替换为:

public static void writeXMLtoFile()
{
    string url = "http://somevalidurl.com/dataPage.php?lotsofpars=true";
    string xml = ScreenScrape(url);
    File.WriteAllText("xml\\myFile.xml", xml);
}

通过这种方式,您还可以使用调试器查看发生了什么(检查xml变量)。

此外,如果您真的只想将页面下载到文件系统,请研究以下方法:)

facepalm您是个天才。就像一个血腥的符咒。非常感谢。谢谢,不用担心。很高兴为某人节省一些时间。如果我根本不需要验证XML,WebClient.download文件也是我会记住的文件。感谢您抽出时间回复:)