Пример #1
0
        public static void TraverseDirectory(string directory, OnFileHandler onfile, OnDirectoryHandler ondir, CheckCancelHandler checkCancel, bool recurse)
        {
            var             invalidHandleValue = new IntPtr(-1);
            WIN32_FIND_DATA findData;

            if (directory.StartsWith("."))
            {
                directory = Environment.CurrentDirectory + directory.Substring(1);
            }

            directory = directory.Replace("/", "\\");

            if (directory.EndsWith("\\"))
            {
                directory = directory.Substring(0, directory.Length - 1);
            }

            IntPtr findHandle = FindFirstFile(@"\\?\" + directory + @"\*", out findData);

            if (findHandle != invalidHandleValue)
            {
                do
                {
                    // Check if we should stop!
                    if (checkCancel != null)
                    {
                        if (checkCancel())
                        {
                            FindClose(findHandle);
                            break;
                        }
                    }

                    if ((findData.dwFileAttributes & FileAttributes.Directory) != 0)
                    {
                        if (findData.cFileName != "." && findData.cFileName != "..")
                        {
                            string subdirectory = directory + (directory.EndsWith(@"\") ? "" : @"\") + findData.cFileName;
                            if (!IsLink(subdirectory))
                            {
                                if (ondir != null)
                                {
                                    ondir(findData, subdirectory);
                                }

                                if (recurse)
                                {
                                    TraverseDirectory(subdirectory, onfile, ondir, checkCancel, true);
                                }
                            }
                        }
                    }
                    else
                    {
                        // File
                        if (onfile != null)
                        {
                            onfile(findData, directory);
                        }
                        // size += (long)findData.nFileSizeLow + (long)findData.nFileSizeHigh * 4294967296;
                    }
                } while (FindNextFile(findHandle, out findData));

                FindClose(findHandle);
            }
        }
Пример #2
0
        public static void TraverseDirectory(string directory, OnFileHandler onfile, OnDirectoryHandler ondir, CheckCancelHandler checkCancel, bool recurse)
        {
            var invalidHandleValue = new IntPtr(-1);
            WIN32_FIND_DATA findData;

            if (directory.StartsWith(".")) {
                directory = Environment.CurrentDirectory + directory.Substring(1);
            }

            directory = directory.Replace("/", "\\");

            if (directory.EndsWith("\\")) {
                directory = directory.Substring(0, directory.Length - 1);
            }

            IntPtr findHandle = FindFirstFile(@"\\?\" + directory + @"\*", out findData);

            if (findHandle != invalidHandleValue) {

                do {
                    // Check if we should stop!
                    if (checkCancel != null) {
                        if (checkCancel()) {
                            FindClose(findHandle);
                            break;
                        }
                    }

                    if ((findData.dwFileAttributes & FileAttributes.Directory) != 0) {
                        if (findData.cFileName != "." && findData.cFileName != "..") {
                            string subdirectory = directory + (directory.EndsWith(@"\") ? "" : @"\") + findData.cFileName;
                            if (!IsLink(subdirectory)) {
                                if (ondir != null) {
                                    ondir(findData, subdirectory);
                                }

                                if (recurse) {
                                    TraverseDirectory(subdirectory, onfile, ondir, checkCancel, true);
                                }
                            }
                        }
                    } else {
                        // File
                        if (onfile != null) {
                            onfile(findData, directory);
                        }
                        // size += (long)findData.nFileSizeLow + (long)findData.nFileSizeHigh * 4294967296;
                    }
                } while (FindNextFile(findHandle, out findData));

                FindClose(findHandle);
            }
        }
Пример #3
0
 public static void RecurseDirectory(string directory, OnFileHandler onfile, OnDirectoryHandler ondir, CheckCancelHandler checkCancel)
 {
     TraverseDirectory(directory, onfile, ondir, checkCancel, true);
 }
Пример #4
0
 public static void RecurseDirectory(string directory, OnFileHandler onfile, OnDirectoryHandler ondir, CheckCancelHandler checkCancel)
 {
     TraverseDirectory(directory, onfile, ondir, checkCancel, true);
 }