【问题标题】:C#: Compare text file contents to a string variableC#:将文本文件内容与字符串变量进行比较
【发布时间】:2023-03-28 06:42:01
【问题描述】:

我有一个将文本转储到文本文件的应用程序。我认为文本不包含正确的回车可能存在问题,所以我正在编写一个测试,将这个文件的内容与我在代码中声明的字符串变量进行比较。

例如:

1) 代码创建一个包含文本的文本文件:

This is line 1
This is line 2
This is line 3

2) 我想比较以下字符串:

string testString = "This is line 1\nThis is line 2\nThis is line3"

我知道我可以打开文件流阅读器并逐行读取文本文件并将其存储在可变字符串变量中,同时在每行后附加“\n”,但想知道这是否是在重新发明轮子(换句话说,.NET 有一个类似这样的内置类)。提前致谢。

【问题讨论】:

    标签: c# .net string file-io compare


    【解决方案1】:

    您可以使用 StreamReader 的 ReadToEnd() 方法读取单个字符串中的内容,例如

        using System.IO;
    
        using(StreamReader streamReader = new StreamReader(filePath))
        {
           string text = streamReader.ReadToEnd();
        }
    

    注意:您必须确保释放资源(上面的代码使用“使用”来执行此操作)并且 ReadToEnd() 方法假定流知道何时结束。对于服务器仅在您请求时才发送数据并且不关闭连接的交互式协议,ReadToEnd 可能会无限期阻塞,因为它没有到达终点,应该避免,并且您应该注意字符串中的当前位置应该在开头。

    你也可以使用 ReadAllText 之类的

        // Open the file to read from.
        string readText = File.ReadAllText(path);
    

    这很简单,它打开一个文件,读取所有行并负责关闭。

    【讨论】:

      【解决方案2】:

      不,没有为此内置任何内容。假设您的文件很小,最简单的方法是阅读整个内容并进行比较:

      var fileContents = File.ReadAllText(fileName);
      return testString == filecontents;
      

      如果文件相当长,您可能需要逐行比较文件,因为尽早发现差异可以减少 IO。

      【讨论】:

        【解决方案3】:

        实现读取文件中所有文本的更快方法是 System.IO.File.ReadAllText()

        但是没有办法缩短字符串级别的比较

        【讨论】:

        • 我不确定这实际上执行得更快 - 只是花费更少的精力来编写(可能更重要的是)确保您不会泄漏句柄。
        • 抱歉,不清楚我的意思是“更快地为您编写代码”
        【解决方案4】:
        if(System.IO.File.ReadAllText(filename) == "This is line 1\nThis is line 2\nThis is line3") {
           // it matches
        }
        

        【讨论】:

          【解决方案5】:

          这应该可行:

          StreamReader streamReader = new StreamReader(filePath);
          string originalString = streamReader.ReadToEnd();
          streamReader.Close();
          

          我认为在 C# 中没有更快的方法。

          【讨论】:

          • 3 下睫毛和一个拳头向你挥舞,因为你没有使用。
          【解决方案6】:

          您可以通过这种方式将整个文件读入字符串变量:

                  FileStream stream;
                  StreamReader reader;
                  stream = new FileStream(yourFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                  reader = new StreamReader(stream);
                  string stringContainingFilesContent = reader.ReadToEnd();
                  // and check for your condition
                  if (testString.Equals(stringContainingFilesContent, StringComparison.OrdinalIgnoreCase))
          

          【讨论】:

            猜你喜欢
            • 2017-01-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-01
            • 2015-10-03
            相关资源
            最近更新 更多