CSharp如果包含一些字符串则跳过循环文件

时间:2017-12-06 11:44:34

标签: c# file loops text readline

早上好, 我循环遍历文件夹中的许多文本文件以获取写在其中的文本。 该文件的名称由另一个程序自动编写,如switch (view.getId()) { case R.id.gridLayout1: view.findViewById(R.id.textView); break; case R.id.gridLayout2: view.findViewById(R.id.textView); break; .... case R.id.gridLayout16: view.findViewById(R.id.textView); break; 标准,因此我无法根据文件名过滤文件...

我注意到他们在第一行有一个文件标识,如date_filename.idORDERR所以我想如果第一行包含一些字符串,是否有一些方法可以跳过该文件。循环看起来就像这样:

Something else

但是当循环到达第二行时,很明显,它将跳过其余部分。 我该怎么办?

提前感谢您提供任何帮助

(我无法通过stackoverflow找到一些东西)

2 个答案:

答案 0 :(得分:2)

我不确定我是否真的满足了你的要求。但是它并不简单(使用LINQ以提高可读性):

var relevantFiles = new DirectoryInfo(path).EnumerateFiles()
   .Where(f => File.ReadLines(f.FullName).ElementAtOrDefault(0)?.Contains("ORDERR")==false); 

请注意,我使用EnumerateFiles更有效率,因为即使您想跳过它们也不需要将所有文件加载到内存中。这同样适用于File.ReadLines(与ReadAllLines相对)。如果文件为空,Enumerable.ElementAtOrDefault会返回null,这就是我使用null-conditional-operator ?的原因。因此查询将跳过第一行包含ORDERR的文件。

答案 1 :(得分:1)

你需要的是设置和打开readloop的标志

DirectoryInfo FilesPath = new DirectoryInfo(path);
var Files = FilesPath.GetFiles();
foreach (var file in Files)
{
    bool hasError = false;
    List<string> lines = new List<string>();
    using (StreamReader sr = file.OpenText())
    {
        string s = "";
        while ((s = sr.ReadLine()) != null)
        {
            if (s.Contains("ORDERR"))
            {
                hasError = true;
                break;
             } else {
                lines.Add(s)
             }
        }
    }

    if (!hasError) 
    {
        // do something with lines as we were ok with it 
    }
}