如何在C#中读取目录中的所有文件?

4
这是我想做的事情:
1. 选择一个目录 2. 输入一个字符串 3. 以字符串形式读取该目录下的所有文件。
我的想法是这样的:
选择目录并输入字符串。遍历该文件夹中的每个文件。例如,文件夹为:Directory={file1.txt,file2.txt,file3.txt} 首先进入file1.txt,将所有文本读取到一个字符串中,并查看该字符串是否在该文件中。如果是,则执行操作;否则,进入file2.txt,以此类推。

15
有些Stack Overflow (SO)的用户会直接给你所需的代码,但为了大家的利益,请先阅读这个网站:http://www.whathaveyoutried.comSO并不总是会直接给你想要的答案,你自己也需要做一些工作。 - Arran
5个回答

16
foreach (string fileName in Directory.GetFiles("directoryName", "searchPattern")
{
    string[] fileLines = File.ReadAllLines(fileName);
    // Do something with the file content
}

您也可以使用File.ReadAllBytes()File.ReadAllText()代替File.ReadAllLines(),这取决于您的要求。


1
我遇到了这个错误... 错误1:当前上下文中不存在名称“File”,我需要添加什么吗? - icebox19
在文件顶部的其他using语句旁边加上“using System.IO;”。 - eyossi

4
        var searchTerm = "SEARCH_TERM";
        var searchDirectory = new System.IO.DirectoryInfo(@"c:\Test\");

        var queryMatchingFiles =
                from file in searchDirectory.GetFiles()
                where file.Extension == ".txt"
                let fileContent = System.IO.File.ReadAllText(file.FullName)
                where fileContent.Contains(searchTerm)
                select file.FullName;

        foreach (var fileName in queryMatchingFiles)
        {
            // Do something
            Console.WriteLine(fileName);
        }

这是基于LINQ的解决方案,也应该能解决你的问题。它可能更易于理解和维护。因此,如果您能够使用LINQ,请尝试一下。


0

我认为这就是你想要的...

string input = "blah blah";
string file_content;
FolderBrowserDialog fld = new FolderBrowserDialog();
if (fld.ShowDialog() == DialogResult.OK)
{
    DirectoryInfo di = new DirectoryInfo(fld.SelectedPath);
    foreach(string f  in Directory.GetFiles(fld.SelectedPath))
    {
        file_content = File.ReadAllText(f);
        if (file_content.Contains(input))
        {
            //string found
            break;
        }
    }
}

0

嗨,实现你要求的最简单方法可能是这样的:

string[] Files = System.IO.Directory.GetFiles("Directory_To_Look_In");

foreach (string sFile in Files)
{
    string fileCont = System.IO.File.ReadAllText(sFile);
    if (fileCont.Contains("WordToLookFor") == true)
    {
        //it found something
    }

}

谢谢,我得到了这个错误... 错误1:当前上下文中不存在名称“File”。 - icebox19
很好,我也稍微编辑了一下代码并进行了测试编译。 :) - JaggenSWE

0
            // Only get files that are text files only as you want only .txt 
            string[] dirs = Directory.GetFiles("target_directory", "*.txt");
            string fileContent = string.Empty;
            foreach (string file in dirs) 
            {
               // Open the file to read from. 
                fileContent = File.ReadAllText(file);                
                // alternative: Use StreamReader to consume the entire text file.
                //StreamReader reader = new StreamReader(file);
                //string fileContent = reader.ReadToEnd();

                if(fileContent.Contains("searching_word")){
                  //do whatever you want
                  //exit from foreach loop as you find your match, so no need to iterate
                    break;
                }

            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接