尝试在文本文件中搜索特定值

时间:2019-06-25 20:21:22

标签: c#

我正在尝试在文件数组中搜索特定值。我不确定我在这里缺少什么,但是一些见识会很棒。

我尝试将每个文件中的所有行都包含到一个数组中,该数组可以从if statement中读取。

    void getAssetTag()
    {
        string path = @"\\SERVER\SHARE\FOLDER";
        DirectoryInfo d = new DirectoryInfo(path);//Grabbing Directory
        FileInfo[] Files = d.GetFiles("*.txt"); //Getting Text files

        foreach (FileInfo file in Files)
        {
            string[] asset = File.ReadAllLines(file.FullName);

            if (asset.Contains(AssetT.Text) == true) {

                string allinfo = File.ReadAllText(file.FullName);
                Results.Text = allinfo;
            }

        }
    }

结果应将AssetT.Text中包含的文本文件中的全部数据输出到Results.Text中。

1 个答案:

答案 0 :(得分:2)

assetstring[],其中每个字符串都是一行文本。当您执行if (asset.Contains(AssetT.Text))时,就是在比较 整行 AssetT.Text

如果要确定是否有任何一行包含AssetT.Text,则需要在 而不是 数组

Contains

此外,您最终将在这里读取文件两次,一次是在您执行if (asset.Any(line => line.Contains(AssetT.Text)) 时,另一次是在您执行ReadAllLines时。由于似乎您将始终读取整个文件(确定文件不包含文本,还是获取所有内容,因为它确实包含文本),因此您应该这样做一次。

如果您一开始使用ReadAllText,现在我们可以看到整个文件的File.ReadAllText表示形式,我们可以在以下位置调用string

.Contains

请注意,我们foreach (FileInfo file in new DirectoryInfo(path).GetFiles("*.txt")) { string asset = File.ReadAllText(file.FullName); if (asset.Contains(AssetT.Text)) { Results.Text = asset; // No use reading more files unless we're going // to save the contents to another variable break; } } 处于循环之外,因为您似乎将文件的内容设置为某个类的单个字段,因此,搜索更多文件只会覆盖之前找到的所有结果。

使用break扩展方法和方法链接可以进一步简化此操作。我们也可以改用System.Linq(它返回文件路径列表),因为我们不需要完整的Directory.GetFiles对象:

FileInfo