如何在迭代搜索目录时跳过目录? (C#)

时间:2012-01-11 09:57:30

标签: c#

我正在尝试编写一个插入查询,数据来自文本文件。但是文本文件位于文件夹中。让我展示一下层次结构。

主文件夹 - >许多文件夹 - >许多文件夹 - >文本文件也有另一个名为ORJ的文件夹。

包含文本文件的每个文件夹都有另一个名为ORJ的文件夹。我不想处理orj。只有文本文件夹和它旁边的pdf。我该怎么做?我找到了一个代码,我正在尝试修改它。顺便说一下,这是C#。

 void ProcessFiles(string path)
{
    Stack<string> stack;
    string[] files;
    string[] directories;
    string dir;

    stack = new Stack();
    stack.Push(path);

    while (stack.Count > 0) {

        // Pop a directory
        dir = stack.Pop();

        files = Directory.GetFiles(dir);
        foreach(string file in files)
        {
            // Process each file
        }

        directories = Directory.GetDirectories(dir);
        foreach(string directory in directories)
        {
            // Push each directory into stack
            stack.Push(directory);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

是否需要使用堆栈执行此操作?

你可以把树递减到

void ProcessFolder(string path) {

    // Process the files 
    foreach(var file in Directory.GetFiles(path)) {  
        // Process each file  
    }  

    // process the sub folders
   foreach (var subFolder in Directory.GetDirectories(path).Where(fld => System.IO.Path.GetFilename(fld) != "ORJ")) {
        ProcessFolder(subFolder);
    }

}

HTH, 艾伦。

答案 1 :(得分:0)

在代码中的某处,您必须检查目录的名称,然后才将其添加到堆栈中。

例如:

    directories = Directory.GetDirectories(dir);
    foreach(string directory in directories)
    {
        if(directory != "ORJ")             // Push each directory except orj into stack
           stack.Push(directory);
    }