如何使用 C# 和 LINQ 从 Web 服务器读取 CSV? (ClickOnce 部署)

How can I read a CSV from Webserver using c# with LINQ? (ClickOnce deployment)

你好,我是编码的新手,但我开发了一个适合本地使用的工具。 我的老板要我把它放在我们的网站上供客户使用。 我发现 ClickOnce 是一种方法。

.exe 正在读取 .csv 文件以查找要使用的数据:

public string FindSalesmenPhone(string userName)
        {
            List<string> resLines = new List<string>();
            var lines = File.ReadLines(@"S:\data.csv");
            foreach (var line in lines)
            {

                var res = line.Split(new char[] { ',' });

                //id to search 
                if (res[7] == userName)
                {
                    resLines.Add(res[10]);
                }

            }
            //to get the output  
            foreach (var line in resLines)
            {

                return line;
            }

            MessageBox.Show("no phone found!");
            return null;
        }

我的问题是:如何更改此路径以及在使用 ClickOnce 部署该工具后是否仍可访问 .csv 文件。

List<string> resLines = new List<string>();
            var lines = File.ReadLines(@"S:\Manuel\data.csv");

我可以简单地把它改成这样吗:

var lines = File.ReadLines(@"http://mywebsite.com/data.csv");

对不起对你们来说可能很容易,但我真的很感谢你们的帮助!

它不会是 File.ReadLines,因为它使用的是 File.IO 并且您要求从网页中获取文本。解决此问题的最佳方法是为您指定的 URL 创建一个 WebRequest,然后使用 StreamReader 从那里读取 csv。 See this thread which is similar.

编辑:

很高兴这对您有所帮助。你可能有一些糟糕的表现只是因为你在没有使用语句的情况下调用了 StreamReader。试试下面的代码:

public string TestCSV(string id)
    {

    List<string> splitted = new List<string>();
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://mywebsite.com/data.csv");
    HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

    using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
    {
    string currentline = sr.ReadLine();
    if (currentline != string.IsNullOrWhiteSpace)
    {

        var res = currentline.Split(new char[] { ',' });

        if (res[0] == id)
        {
            splitted.Add(res[1]);
        }

        foreach (var line in splitted)
        {

            return line;
        } 
     }
  }
 return null;
}

谢谢瑞安,这很有帮助。

我修改了它供我使用,但是现在性能很差。猜猜工具会一遍又一遍地读取文件...(有几点在运行时调用此方法)

有没有办法可以将 .csv 保存在二维数组中,然后在程序的整个运行时保存它? .csv 包含大约 900 个条目..

public string TestCSV(string id)
    {

        List<string> splitted = new List<string>();
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://mywebsite.com/data.csv");
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

        StreamReader sr = new StreamReader(resp.GetResponseStream());

        string currentline;
        while ((currentline = sr.ReadLine()) != null)
        {

            var res = currentline.Split(new char[] { ',' });

            if (res[0] == id)
            {
                splitted.Add(res[1]);
            }

            foreach (var line in splitted)
            {

                return line;
            } 
        }
        return null;
    }