281

How can I delete a file in C# e.g. C:\test.txt, although apply the same kind of method like in batch files e.g.

if exist "C:\test.txt" delete "C:\test.txt" else return nothing (ignore) 

11 Answers 11

480

This is pretty straightforward using the File class.

if(File.Exists(@"C:\test.txt")) { File.Delete(@"C:\test.txt"); } 


As Chris pointed out in the comments, you don't actually need to do the File.Exists check since File.Delete doesn't throw an exception if the file doesn't exist, although if you're using absolute paths you will need the check to make sure the entire file path is valid.

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

6 Comments

That test isn't actually needed. See my post.
The test is necessary if you want to prevent a possible DirectoryNotFoundException.
The test shouldn't be used in place of exception handling tho, but rather in conduction with it. Any number of scenarios can result in the exists check returning true and Delete throwing.
Why's there an @ before the file path? For me it works without.
@ keeps you from having to double up the backslashes.
|
138

Use System.IO.File.Delete like so:

System.IO.File.Delete(@"C:\test.txt")

From the documentation:

If the file to be deleted does not exist, no exception is thrown.

7 Comments

That will throw a DirectoryNotFoundException if "The specified path is invalid (for example, it is on an unmapped drive)."
How odd. Intellisense says An exception is thrown if the specified file does not exist.
Perhaps you're using a different version of the .NET framework?
I'm using .Net4, it looks like the intellisense is wrong I have run a check and no exception is thrown
Yeah I tried and just System.IO.File.Delete(@"C:\test.txt"); is enough. Thanks
|
49

You could import the System.IO namespace using:

using System.IO; 

If the filepath represents the full path to the file, you can check its existence and delete it as follows:

if(File.Exists(filepath)) { try { File.Delete(filepath); } catch(Exception ex) { //Do something } } 

2 Comments

Why not just issue the Delete call regardless and catch any exception that indicates that the file didn't exist?
There are more exceptions that can be thrown, I suppose.
35
if (System.IO.File.Exists(@"C:\test.txt")) System.IO.File.Delete(@"C:\test.txt")); 

but

System.IO.File.Delete(@"C:\test.txt"); 

will do the same as long as the folder exists.

Comments

27

If you want to avoid a DirectoryNotFoundException you will need to ensure that the directory of the file does indeed exist. File.Exists accomplishes this. Another way would be to utilize the Path and Directory utility classes like so:

string file = @"C:\subfolder\test.txt"; if (Directory.Exists(Path.GetDirectoryName(file))) { File.Delete(file); } 

Comments

17
 if (System.IO.File.Exists(@"C:\Users\Public\DeleteTest\test.txt")) { // Use a try block to catch IOExceptions, to // handle the case of the file already being // opened by another process. try { System.IO.File.Delete(@"C:\Users\Public\DeleteTest\test.txt"); } catch (System.IO.IOException e) { Console.WriteLine(e.Message); return; } } 

Comments

15
if (File.Exists(path)) { File.Delete(path); } 

Comments

6
if (File.Exists(Path.Combine(rootFolder, authorsFile))) { // If file found, delete it File.Delete(Path.Combine(rootFolder, authorsFile)); Console.WriteLine("File deleted."); } 

Dynamic

 string FilePath = Server.MapPath(@"~/folder/news/" + IdSelect) if (System.IO.File.Exists(FilePath + "/" + name+ ".jpg")) { System.IO.File.Delete(FilePath + "/" + name+ ".jpg"); } 

Delete all files in a directory

string[] files = Directory.GetFiles(rootFolder); foreach (string file in files) { File.Delete(file); Console.WriteLine($"{file} is deleted."); } 

Comments

4

If you are reading from that file using FileStream and then wanting to delete it, make sure you close the FileStream before you call the File.Delete(path). I had this issue.

var filestream = new System.IO.FileStream(@"C:\Test\PutInv.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite); filestream.Close(); File.Delete(@"C:\Test\PutInv.txt"); 

1 Comment

Or use a using statement, where the File.Delete() would go outside the brackets. In the example you have, you should also do a filestream.Dispose();.
1

Sometimes you want to delete a file whatever the case(whatever the exception occurs ,please do delete the file). For such situations.

public static void DeleteFile(string path) { if (!File.Exists(path)) { return; } bool isDeleted = false; while (!isDeleted) { try { File.Delete(path); isDeleted = true; } catch (Exception e) { } Thread.Sleep(50); } } 

Note:An exception is not thrown if the specified file does not exist.

3 Comments

So you are trying to delete file 20 times per second until it's deleted. What if, for some reason, file can't be deleted and program will try to delete it forever? I don't think this is good solution.
At the very least, you should provide a timeout parameter.
@kv1dr right. I think you should try for a limited time and return a failure message if the file wasn't deleted.
0

This will be the simplest way,

if (System.IO.File.Exists(filePath)) { System.IO.File.Delete(filePath); System.Threading.Thread.Sleep(20); } 

Thread.sleep will help to work perfectly, otherwise, it will affect the next step if we doing copy or write the file.

Another way I did is,

if (System.IO.File.Exists(filePath)) { System.GC.Collect(); System.GC.WaitForPendingFinalizers(); System.IO.File.Delete(filePath); } 

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.