【问题标题】:I'm trying to write a code that checks if a file has a certain string我正在尝试编写一个代码来检查文件是否具有特定字符串
【发布时间】:2022-11-16 05:11:16
【问题描述】:

我写了一个代码来打开我的文件并读取它并检查它是否包含特定的用户名和密码。但它不工作。

该方法总是返回 false,我不知道为什么。

我的想法是让我的代码读取每一行并将每一行拆分为数组中的 3 个字符串,然后验证每个字符串是否具有用户名或密码。如果它只找到一个,它会转到另一行,如果它在同一行中找到两个,它就会中断

        public bool readFile(string username, string password, string path)
        {
            int cntr = 0;
            string[] lines = File.ReadAllLines(path);
            foreach (string line in lines)
            {
                cntr = 0;
                string[] words = line.Split('-');
                foreach (string element in words)
                {
                    if (element == username || element == password)
                        cntr++;
                }
                if (cntr == 2)
                    break;
            }
            return cntr == 2? true : false;
        }

我试过了,我不知道为什么它不起作用,因为我在使用接口和差异类,我很难用消息框调试它

【问题讨论】:

  • 这是您开始熟悉using a debugger 的好机会。当您在调试器中单步执行代码时,哪个操作首先会产生意外结果?该操作中使用的值是什么?结果如何?预期的结果是什么?为什么?要了解有关此社区的更多信息以及我们如何为您提供帮助,请从tour 开始并阅读How to Ask 及其链接资源。
  • 我很想借此机会,因为我看到人们这样做但不知道怎么做
  • 如果(cntr == 2)中断;应该在同一条线上
  • 您还可以使用更多代码来识别何时找到用户名,因为如果找到 2 个用户名或 2 个密码,此代码可能会返回 true。
  • 它不是你问题的原因,但你也应该记住difference between File.ReadLines() and File.ReadAllLines()。一旦你弄清楚了你的核心问题,了解它们之间的区别可能有助于提高你的代码的性能。

标签: c#


【解决方案1】:
string[] words = line.Split();

将用空格分割线,而你看起来像用破折号“-”分割线。它可能每次都返回 false,因为 line 从未被拆分成一个数组,所以数组从未被搜索过,所以 cntr 从未达到 2。

【讨论】:

  • 我们不知道被解析的数据,所以这只是一个猜测而不是答案。也许作为评论更有意义?
猜你喜欢
  • 2020-12-08
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 1970-01-01
  • 2015-05-06
  • 2014-12-15
  • 1970-01-01
相关资源
最近更新 更多