コード例 #1
0
ファイル: Directory.cs プロジェクト: 24/source_04
 private static void FollowDirectoryTrees(IEnumerable <Action <EnumDirectoryInfo> > followDirectoryTrees, EnumDirectoryInfo enumDirectoryInfo)
 {
     foreach (Action <EnumDirectoryInfo> followDirectoryTree in followDirectoryTrees)
     {
         followDirectoryTree(enumDirectoryInfo);
     }
 }
コード例 #2
0
ファイル: Directory.cs プロジェクト: 24/source_04
        private static EnumDirectoryFilter EvaluateDirectoryFilters(IEnumerable <Func <EnumDirectoryInfo, EnumDirectoryFilter> > directoryFilters, EnumDirectoryInfo enumDirectoryInfo)
        {
            bool select = true;
            bool recurseSubDirectory = true;

            foreach (Func <EnumDirectoryInfo, EnumDirectoryFilter> directoryFilter in directoryFilters)
            {
                EnumDirectoryFilter enumDirectoryFilter = directoryFilter(enumDirectoryInfo);
                if (select)
                {
                    select = enumDirectoryFilter.Select;
                }
                if (recurseSubDirectory)
                {
                    recurseSubDirectory = enumDirectoryFilter.RecurseSubDirectory;
                }
                if (!select && !recurseSubDirectory)
                {
                    break;
                }
            }
            return(new EnumDirectoryFilter {
                Select = select, RecurseSubDirectory = recurseSubDirectory
            });
        }
コード例 #3
0
ファイル: Directory.cs プロジェクト: 24/source_04
        // followDirectoryTree : followDirectoryTree est appelé quand on entre dans un répertoire et quand on en sort
        //                       à l'entrée EnumDirectoryInfo contient les info du répertoire
        //                       à la sortie EnumDirectoryInfo contient uniquement le Level
        // followDirectoryTree exemple EnumerateDirectoriesInfo(@"c:\toto");
        //   entré dans tata EnumDirectoryInfo = Directory: "c:\toto\tata" SubDirectory: "tata" Level: 1
        //   entré dans tutu EnumDirectoryInfo = Directory: "c:\toto\tata\tutu" SubDirectory: "tutu" Level: 2
        //   sortie de tutu EnumDirectoryInfo = Directory: null SubDirectory: null Level: 2
        //   sortie de tata EnumDirectoryInfo = Directory: null SubDirectory: null Level: 1
        public static IEnumerable <EnumDirectoryInfo> EnumerateDirectoriesInfo(string directory, string pattern = null,
                                                                               //Func<EnumDirectoryInfo, EnumDirectoryFilter> directoryFilter = null,
                                                                               IEnumerable <Func <EnumDirectoryInfo, EnumDirectoryFilter> > directoryFilters = null,
                                                                               //Action<EnumDirectoryInfo> followDirectoryTree = null,
                                                                               IEnumerable <Action <EnumDirectoryInfo> > followDirectoryTrees = null,
                                                                               bool getSubDirectoryNumber = false)
        {
            if (!zDirectory.Exists(directory))
            {
                yield break;
            }
            Stack <EnumDirectory> directoryStack      = new Stack <EnumDirectory>();
            EnumDirectory         enumDirectory       = new EnumDirectory(directory, pattern);
            EnumDirectoryFilter   enumDirectoryFilter = new EnumDirectoryFilter {
                Select = true, RecurseSubDirectory = true
            };
            int l     = directory.Length + 1;
            int level = 1;

            while (true)
            {
                if (enumDirectory.directoryEnum.MoveNext())
                {
                    DirectoryInfo     directoryInfo     = enumDirectory.directoryEnum.Current;
                    EnumDirectoryInfo enumDirectoryInfo = new EnumDirectoryInfo
                    {
                        Directory = directoryInfo.FullName, SubDirectory = directoryInfo.FullName.Substring(l), Name = directoryInfo.Name, Level = level
                    };

                    if (getSubDirectoryNumber)
                    {
                        FileNumber directoryNumberInfo = FileNumber.GetFileNumber(enumDirectoryInfo.Name);
                        enumDirectoryInfo.Name   = directoryNumberInfo.BasePath;
                        enumDirectoryInfo.Number = directoryNumberInfo.Number;
                    }

                    //if (directoryFilter != null)
                    //    enumDirectoryFilter = directoryFilter(enumDirectoryInfo);
                    if (directoryFilters != null)
                    {
                        enumDirectoryFilter = EvaluateDirectoryFilters(directoryFilters, enumDirectoryInfo);
                    }

                    if (enumDirectoryFilter.Select)
                    {
                        //if (followDirectoryTree != null)
                        //    followDirectoryTree(enumDirectoryInfo);
                        if (followDirectoryTrees != null)
                        {
                            FollowDirectoryTrees(followDirectoryTrees, enumDirectoryInfo);
                        }

                        //if (getSubDirectoryNumber)
                        //{
                        //    FilenameNumberInfo directoryNumberInfo = FilenameNumberInfo.GetFilenameNumberInfo(enumDirectoryInfo.SubDirectory);
                        //    //enumDirectoryInfo.SubDirectory = directoryNumberInfo.BaseFilename;
                        //    enumDirectoryInfo.SubDirectory = directoryNumberInfo.BasePath;
                        //    enumDirectoryInfo.Number = directoryNumberInfo.Number;
                        //}
                        yield return(enumDirectoryInfo);

                        //if (!enumDirectoryFilter.RecurseSubDirectory && followDirectoryTree != null)
                        //    followDirectoryTree(new EnumDirectoryInfo { Level = level });
                        if (!enumDirectoryFilter.RecurseSubDirectory && followDirectoryTrees != null)
                        {
                            FollowDirectoryTrees(followDirectoryTrees, new EnumDirectoryInfo {
                                Level = level
                            });
                        }
                    }

                    if (enumDirectoryFilter.RecurseSubDirectory)
                    {
                        //if (!enumDirectoryFilter.Select && followDirectoryTree != null)
                        //    followDirectoryTree(enumDirectoryInfo);
                        if (!enumDirectoryFilter.Select && followDirectoryTrees != null)
                        {
                            FollowDirectoryTrees(followDirectoryTrees, enumDirectoryInfo);
                        }

                        directoryStack.Push(enumDirectory);
                        enumDirectory = new EnumDirectory(enumDirectory.directoryEnum.Current, pattern);
                        level++;
                    }
                }
                else
                {
                    if (directoryStack.Count == 0)
                    {
                        break;
                    }
                    enumDirectory = directoryStack.Pop();
                    level--;

                    //if (followDirectoryTree != null)
                    //    followDirectoryTree(new EnumDirectoryInfo { Level = level });
                    if (followDirectoryTrees != null)
                    {
                        FollowDirectoryTrees(followDirectoryTrees, new EnumDirectoryInfo {
                            Level = level
                        });
                    }
                }
            }
        }
コード例 #4
0
ファイル: Directory.cs プロジェクト: labeuze/source
 private static void FollowDirectoryTrees(IEnumerable<Action<EnumDirectoryInfo>> followDirectoryTrees, EnumDirectoryInfo enumDirectoryInfo)
 {
     foreach (Action<EnumDirectoryInfo> followDirectoryTree in followDirectoryTrees)
         followDirectoryTree(enumDirectoryInfo);
 }
コード例 #5
0
ファイル: Directory.cs プロジェクト: labeuze/source
 private static EnumDirectoryFilter EvaluateDirectoryFilters(IEnumerable<Func<EnumDirectoryInfo, EnumDirectoryFilter>> directoryFilters, EnumDirectoryInfo enumDirectoryInfo)
 {
     bool select = true;
     bool recurseSubDirectory = true;
     foreach (Func<EnumDirectoryInfo, EnumDirectoryFilter> directoryFilter in directoryFilters)
     {
         EnumDirectoryFilter enumDirectoryFilter = directoryFilter(enumDirectoryInfo);
         if (select)
             select = enumDirectoryFilter.Select;
         if (recurseSubDirectory)
             recurseSubDirectory = enumDirectoryFilter.RecurseSubDirectory;
         if (!select && !recurseSubDirectory)
             break;
     }
     return new EnumDirectoryFilter { Select = select, RecurseSubDirectory = recurseSubDirectory };
 }
コード例 #6
0
ファイル: Directory.cs プロジェクト: labeuze/source
        // followDirectoryTree : followDirectoryTree est appelé quand on entre dans un répertoire et quand on en sort
        //                       à l'entrée EnumDirectoryInfo contient les info du répertoire
        //                       à la sortie EnumDirectoryInfo contient uniquement le Level
        // followDirectoryTree exemple EnumerateDirectoriesInfo(@"c:\toto");
        //   entré dans tata EnumDirectoryInfo = Directory: "c:\toto\tata" SubDirectory: "tata" Level: 1
        //   entré dans tutu EnumDirectoryInfo = Directory: "c:\toto\tata\tutu" SubDirectory: "tutu" Level: 2
        //   sortie de tutu EnumDirectoryInfo = Directory: null SubDirectory: null Level: 2
        //   sortie de tata EnumDirectoryInfo = Directory: null SubDirectory: null Level: 1
        public static IEnumerable<EnumDirectoryInfo> EnumerateDirectoriesInfo(string directory, string pattern = null,
            //Func<EnumDirectoryInfo, EnumDirectoryFilter> directoryFilter = null,
            IEnumerable<Func<EnumDirectoryInfo, EnumDirectoryFilter>> directoryFilters = null,
            //Action<EnumDirectoryInfo> followDirectoryTree = null,
            IEnumerable<Action<EnumDirectoryInfo>> followDirectoryTrees = null,
            bool getSubDirectoryNumber = false)
        {
            if (!zDirectory.Exists(directory))
                yield break;
            Stack<EnumDirectory> directoryStack = new Stack<EnumDirectory>();
            EnumDirectory enumDirectory = new EnumDirectory(directory, pattern);
            EnumDirectoryFilter enumDirectoryFilter = new EnumDirectoryFilter { Select = true, RecurseSubDirectory = true };
            int l = directory.Length + 1;
            int level = 1;
            while (true)
            {
                if (enumDirectory.directoryEnum.MoveNext())
                {
                    DirectoryInfo directoryInfo = enumDirectory.directoryEnum.Current;
                    EnumDirectoryInfo enumDirectoryInfo = new EnumDirectoryInfo
                        { Directory = directoryInfo.FullName, SubDirectory = directoryInfo.FullName.Substring(l), Name = directoryInfo.Name, Level = level };

                    if (getSubDirectoryNumber)
                    {
                        FilenameNumberInfo directoryNumberInfo = FilenameNumberInfo.GetFilenameNumberInfo(enumDirectoryInfo.Name);
                        enumDirectoryInfo.Name = directoryNumberInfo.BasePath;
                        enumDirectoryInfo.Number = directoryNumberInfo.Number;
                    }

                    //if (directoryFilter != null)
                    //    enumDirectoryFilter = directoryFilter(enumDirectoryInfo);
                    if (directoryFilters != null)
                        enumDirectoryFilter = EvaluateDirectoryFilters(directoryFilters, enumDirectoryInfo);

                    if (enumDirectoryFilter.Select)
                    {
                        //if (followDirectoryTree != null)
                        //    followDirectoryTree(enumDirectoryInfo);
                        if (followDirectoryTrees != null)
                            FollowDirectoryTrees(followDirectoryTrees, enumDirectoryInfo);

                        //if (getSubDirectoryNumber)
                        //{
                        //    FilenameNumberInfo directoryNumberInfo = FilenameNumberInfo.GetFilenameNumberInfo(enumDirectoryInfo.SubDirectory);
                        //    //enumDirectoryInfo.SubDirectory = directoryNumberInfo.BaseFilename;
                        //    enumDirectoryInfo.SubDirectory = directoryNumberInfo.BasePath;
                        //    enumDirectoryInfo.Number = directoryNumberInfo.Number;
                        //}
                        yield return enumDirectoryInfo;

                        //if (!enumDirectoryFilter.RecurseSubDirectory && followDirectoryTree != null)
                        //    followDirectoryTree(new EnumDirectoryInfo { Level = level });
                        if (!enumDirectoryFilter.RecurseSubDirectory && followDirectoryTrees != null)
                            FollowDirectoryTrees(followDirectoryTrees, new EnumDirectoryInfo { Level = level });
                    }

                    if (enumDirectoryFilter.RecurseSubDirectory)
                    {
                        //if (!enumDirectoryFilter.Select && followDirectoryTree != null)
                        //    followDirectoryTree(enumDirectoryInfo);
                        if (!enumDirectoryFilter.Select && followDirectoryTrees != null)
                            FollowDirectoryTrees(followDirectoryTrees, enumDirectoryInfo);

                        directoryStack.Push(enumDirectory);
                        enumDirectory = new EnumDirectory(enumDirectory.directoryEnum.Current, pattern);
                        level++;
                    }
                }
                else
                {
                    if (directoryStack.Count == 0)
                        break;
                    enumDirectory = directoryStack.Pop();
                    level--;

                    //if (followDirectoryTree != null)
                    //    followDirectoryTree(new EnumDirectoryInfo { Level = level });
                    if (followDirectoryTrees != null)
                        FollowDirectoryTrees(followDirectoryTrees, new EnumDirectoryInfo { Level = level });
                }
            }
        }