public static void WalkTree(String dirName, ITreeWalker walker)
        {
            var dirCount = 0;

            dirName = StringUtils.StandardisePath(dirName);
            Stack <String> dirStack = new Stack <String>();

            dirStack.Push(dirName);
            while (dirStack.Count > 0)
            {
                String        lastPath = dirStack.Pop();
                DirectoryInfo di       = new DirectoryInfo(lastPath);
                if (!di.Exists || ((di.Attributes & FileAttributes.Hidden) != 0 && dirCount > 0))
                {
                    continue;
                }
                ++dirCount;
                foreach (FileInfo fileInfo in di.GetFiles(walker.FileSearchPattern()))
                {
                    // compose full file name from dirName
                    String f = lastPath;
                    if (f[f.Length - 1] == '/')
                    {
                        f += fileInfo.Name;
                    }
                    else
                    {
                        f = f + "/" + fileInfo.Name;
                    }
                    var cmd = walker.DoFile(f);
                    switch (cmd)
                    {
                    case TreeWalkerCmd.Skip:
                        continue;

                    case TreeWalkerCmd.Exit:
                        goto EXIT;
                    }
                }
                if (walker.IsRecursive())
                {
                    foreach (DirectoryInfo dirInfo in di.GetDirectories(walker.DirectorySearchPattern()))
                    {
                        // compose full path name from dirName
                        String p = lastPath;
                        if (p[p.Length - 1] == '/')
                        {
                            p += dirInfo.Name;
                        }
                        else
                        {
                            p = p + "/" + dirInfo.Name;
                        }
                        FileAttributes fa = File.GetAttributes(p);
                        if ((fa & FileAttributes.Hidden) == 0)
                        {
                            var cmd = walker.DoDirectory(p);
                            switch (cmd)
                            {
                            case TreeWalkerCmd.Skip:
                                continue;

                            case TreeWalkerCmd.Exit:
                                goto EXIT;
                            }
                            dirStack.Push(p);
                        }
                    }
                }
            }
EXIT:
            ;
        }
Beispiel #2
0
        private static void WalkTree(String dirName, ITreeWalker walker)
        {
            dirName = Common.StringUtils.StandardisePath(dirName);
            LinkedList <String> dirStack = new LinkedList <String>();

            dirStack.AddLast(dirName);
            while (dirStack.Count > 0)
            {
                String lastPath = dirStack.Last.Value;
                dirStack.RemoveLast();
                DirectoryInfo di = new DirectoryInfo(lastPath);
                if (!di.Exists || (di.Attributes & FileAttributes.Hidden) != 0)
                {
                    continue;
                }
                foreach (FileInfo fileInfo in di.GetFiles(walker.FileSearchPattern()))
                {
                    // compose full file name from dirName
                    String f = lastPath;
                    if (f[f.Length - 1] == '/')
                    {
                        f += fileInfo.Name;
                    }
                    else
                    {
                        f = f + "/" + fileInfo.Name;
                    }
                    if (!walker.DoFile(f))
                    {
                        goto EXIT;
                    }
                }
                if (walker.IsRecursive())
                {
                    foreach (DirectoryInfo dirInfo in di.GetDirectories(walker.DirectorySearchPattern()))
                    {
                        // compose full path name from dirName
                        String p = lastPath;
                        if (p[p.Length - 1] == '/')
                        {
                            p += dirInfo.Name;
                        }
                        else
                        {
                            p = p + "/" + dirInfo.Name;
                        }
                        dirStack.AddLast(p);
                        FileAttributes fa = File.GetAttributes(p);
                        if ((fa & FileAttributes.Hidden) == 0)
                        {
                            if (!walker.DoDirectory(p))
                            {
                                goto EXIT;
                            }
                        }
                    }
                }
            }
EXIT:
            ;
        }