94

You know that in linux it's easy but I can't just understand how to do it in C# on Windows. I want to delete all files matching the wildcard f*.txt. How do I go about going that?

4 Answers 4

156

You can use the DirectoryInfo.EnumerateFiles function:

var dir = new DirectoryInfo(directoryPath); foreach (var file in dir.EnumerateFiles("f*.txt")) { file.Delete(); } 

(Of course, you'll probably want to add error handling.)

Sign up to request clarification or add additional context in comments.

2 Comments

Or shorter: dir.EnumerateFiles("f*.txt").ToList().ForEach(f => f.Delete());
@jstuardo: Creating a list defeats the point of switching to EnumerateFiles over GetFiles.
82

I know this has already been answered and with a good answer, but there is an alternative in .NET 4.0 and higher. Use Directory.EnumerateFiles(), thus:

foreach (string f in Directory.EnumerateFiles(myDirectory,"f*.txt")) { File.Delete(f); } 

The disadvantage of DirectoryInfo.GetFiles() is that it returns a list of files - which 99.9% of the time is great. The disadvantage is if the folder contains tens of thousands of files (which is rare) then it becomes very slow and enumerating through the matching files is much faster.

3 Comments

Note that DirectoryInfo has EnumerateFiles() as well.
In case anyone is wondering why this answer is so similar to the accepted answer, it is because the accepted answer has been rewritten in light of this one. Which is a shame because using DirectoryInfo.GetFiles() (which was the original answer) is the only way to do it for earlier versions of .NET.
This answer, Directory.EnumerateFiles(), is still faster than then accepted one as it returns an IEnumerable of strings, rather than FileInfo classes where all the other properties need to be populated too. If want to do something else with the file information before or after deleting it, use DirectorInfo, but if you are just deleting use Directory. In a large directory it will be a lot faster.
8

You can use the Directory.GetFiles method with the wildcard overload. This will return all the filenames that match your pattern. You can then delete these files.

Comments

5

I appreciate this thread is a little old now, but if you want to use linq then

Directory.GetFiles("f:\\TestData", "*.zip", SearchOption.TopDirectoryOnly).ToList().ForEach(File.Delete); 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.