Example #1
0
        public static void WipeFolder(string baseDir)
        {
            DirectoryInfo dirInfo = new DirectoryInfo(baseDir);

            if (!dirInfo.Exists)
            {
                return;
            }

            RecursiveDelete(dirInfo);

            if (!Directory.EnumerateFileSystemEntries(dirInfo.FullName).Any())
            {
                try {
                    dirInfo.Delete();
                } catch {
                    HandleUtil.KillProcessesUsingFile(dirInfo.FullName);
                    Thread.Sleep(500);

                    try {
                        dirInfo.Delete();
                    } catch {
                        // We've tried for long enough...
                    }
                }
            }
        }
Example #2
0
        public static void DeleteFile(FileInfo file)
        {
            if (!file.Exists)
            {
                return;
            }

            try {
                file.IsReadOnly = false;
                file.Delete();
            } catch {
                for (int i = 0; i < 10; ++i)
                {
                    try {
                        TakeOwnership(file.FullName);
                        file.IsReadOnly = false;
                        file.Delete();
                        return;
                    } catch {
                        // Try again after sleeping.
                        Thread.Sleep(500);
                    }
                }

                HandleUtil.KillProcessesUsingFile(file.FullName);
                Thread.Sleep(500);
                file.Delete();
            }
        }
Example #3
0
        public static void RecursiveDelete(DirectoryInfo rootDir, DirectoryInfo baseDir, string filename)
        {
            if (!baseDir.Exists)
            {
                return;
            }

            if (!baseDir.FullName.StartsWith(rootDir.FullName))
            {
                // Sanity check.
                return;
            }

            foreach (DirectoryInfo dir in baseDir.EnumerateDirectories())
            {
                RecursiveDelete(rootDir, dir, filename);
            }

            foreach (FileInfo file in baseDir.GetFiles())
            {
                if (!file.FullName.StartsWith(rootDir.FullName))
                {
                    // Sanity check.
                    continue;
                }

                if (filename == null || file.Name.Equals(filename))
                {
                    DeleteFile(file);
                }
            }

            if (!Directory.EnumerateFileSystemEntries(baseDir.FullName).Any())
            {
                try {
                    baseDir.Delete();
                } catch {
                    HandleUtil.KillProcessesUsingFile(baseDir.FullName);
                    baseDir.Delete();
                }
            }
        }