How can I delete the contents a directory, without deleting the directory itself? Here's what I've tried so far

StackOverflow https://stackoverflow.com/questions/23574885

  •  19-07-2023
  •  | 
  •  

문제

I'm making a button that reads a file path then deletes the files within the folder. It's currently deleting the entire directory. Here's my code:

public void deleteFiles(string Server)
{
    string output = "\\\\" + Server + "\\F\\Output";
    string input = "\\\\" + Server + "\\F\\Input";
    string exceptions = "\\\\" + Server + "\\F\\Exceptions";

    new System.IO.DirectoryInfo(input).Delete(true);
    new System.IO.DirectoryInfo(output).Delete(true);
    new System.IO.DirectoryInfo(exceptions).Delete(true);
}
도움이 되었습니까?

해결책 2

Would just deleting the directory and recreating it work? Or do you want to preserve permissions?

다른 팁

You are calling Delete method on DirectoryInfo, you should call it on FileInfo's instead:

var files =  new DirectoryInfo(input).GetFiles()
                .Concat(new DirectoryInfo(output).GetFiles())
                .Concat(new DirectoryInfo(exceptions).GetFiles());

foreach(var file in files)
     file.Delete();

Another way:

var files =  Directory.GetFiles(input)
                .Concat(Directory.GetFiles(output))
                .Concat(Directory.GetFiles(exceptions));

foreach(var file in files)
     File.Delete(file);

DirectoryInfo.Delete and Directory.Delete delete empty directories, if you want to delete files you could try this method:

public void DeleteFiles(string path, bool recursive, string searchPattern = null)
{
    var entries = searchPattern == null ? Directory.EnumerateFileSystemEntries(path) : Directory.EnumerateFileSystemEntries(path, searchPattern);
    foreach(string entry in entries)
    {
        try
        {
            FileAttributes attr = File.GetAttributes(entry);
            //detect whether its a directory or file
            bool isDir = (attr & FileAttributes.Directory) == FileAttributes.Directory;
            if(!isDir)
                File.Delete(entry);
            else if(recursive)
                DeleteFiles(entry, true, searchPattern);
        }
        catch
        {
            //ignore
        }
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top