foreach (var file in Directory.GetFiles(_filepath)) { if(new FileInfo(file).Name.EndsWith(".txt")) { string str = ""; using (var fs = new FileStream(_filepath + new FileInfo(file).Name, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using (var sr = new StreamReader(fs)) { str = sr.ReadToEnd(); } } } }
这个是文件夹里面所有txt文档中的数据吗。好像是搜索文件名的
思路:先获取到目录里的所有记事本文件的物理路径存放到list里(支持无限递归 即文件夹里有文件夹 里面才是记事本)
一行一行读取list里没个记事本文件的每一行 拿到需要的数据 使用到:readLine indexof等
拿到所有符合条件的数据 最后显示的页面上
代码片段:
//递归 public static void GetTxt(DirectoryInfo dir) { FileInfo[] files = dir.GetFiles(); FileAttributes fa; foreach (FileInfo item in files) { //if (item.Extension == ".txt") //{ //遍历时忽略隐藏文件 fa = item.Attributes & FileAttributes.Hidden; if (fa != FileAttributes.Hidden) { //MessageBox.Show(item.FullName); //所有的记事本全路径全部放入list集合中 list.Add(item.FullName); } //} } DirectoryInfo[] dirs = dir.GetDirectories(); //获取子目录 foreach (DirectoryInfo item in dirs) { GetTxt(item); } } //循环list里所有记事本文件 foreach (string item in list) { FileStream fs = new FileStream(item, FileMode.Open); StreamReader reader = new StreamReader(fs, Encoding.Default); try { //循环读取记事本 while (true) { string str = reader.ReadLine(); if (str == null) { break; } else if (str.Trim() == "") { continue; } else { //这里就是每行数据了 你可以进行处理 取出符合要求的行 } }
list是定义的数组吗
@午夜梦回: 泛型集合 list<string>
上面给的知识代码片段,你照着这个思路可以写出来的
我本来的代码是遍历数百个记事本 千万行数据 截取处理 然后插入数据库
你的要求按照这个思路也能写出来,多试试吧
@心态要好: //这里就是每行数据了 你可以进行处理 取出符合要求的行
这块要怎么写,比如我要查找的数据是Sender=你好 能给个代码吗,没有写过这个快
@午夜梦回:
if(str.indexof("Sender=你好")!=-1) { 此行包括“Sender=你好”几个字 } else { 不包括“Sender=你好” }
@心态要好: 我如果是在指定的盘符读取指定的文件的。是不是这样做?
string file = @"F:\5.开发文档\type.txt";
if (File.Exists(file))
{
FileStream fs = new FileStream(file,FileMode.Open,FileAccess.Read);
StreamReader sr = new StreamReader(fs);
string linc = sr.ReadLine();
while(linc!=null)
{
Console.WriteLine(linc);
linc = sr.ReadLine();
}
sr.Close();
fs.Close();
}
你能告诉我读取文档的思路吗?