早上好,
我循环遍历文件夹中的许多文本文件以获取写在其中的文本。
该文件的名称由另一个程序自动编写,如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.id
或ORDERR
所以我想如果第一行包含一些字符串,是否有一些方法可以跳过该文件。循环看起来就像这样:
Something else
但是当循环到达第二行时,很明显,它将跳过其余部分。 我该怎么办?
提前感谢您提供任何帮助
(我无法通过stackoverflow找到一些东西)
答案 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
}
}