Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Directory is not empty" error when trying to programmatically delete a folder

Tags:

c#

asp.net

In my app, I have built a system where users can create picture galleries. Photos held in folders in the format of category_name/gallery_name/{pictures} on disk. Each uploaded photo is stored under relevant directory structure as given above.

When trying to delete a category though, as well as deleting from the database, I want to delete relevant folders from the system too. When I first received the error message "Directory is not empty" I searched and found this solution:

public static void DeleteDirectory(string target_dir)     {         string[] files = Directory.GetFiles(target_dir);         string[] dirs = Directory.GetDirectories(target_dir);          foreach (string file in files)         {             File.SetAttributes(file, FileAttributes.Normal);             File.Delete(file);         }          foreach (string dir in dirs)         {             DeleteDirectory(dir);         }          Directory.Delete(target_dir, false);     } 

With this solution, photos in the "gallery_name" folder gets deleted just fine, then the gallery_name folder itself gets deleted fine.. so we are now left with an empty category_name folder. Then the last bit of code in the above subroutine (Directory.Delete(target_dir, false);) gets called to delete the category_name folder. The error raises again..

Does anyone knows a solution to this?

  1. Directory.Delete(target_dir, true); did not work, that is why I tried an alternative.
  2. I have full control over the parent folder and the category_name and gallery_name folders are also created programmatically without any problem.
  3. As I mentioned, the sub directories (gallery_name folders) and their contents (photos) are deleted with this code just fine. It is the category_name folder which causes the error, even though after this code, it is just an empty folder.

The exception message I get is:

System.IO.IOException was unhandled by user code   HResult=-2147024751   Message=The directory is not empty.    Source=mscorlib   StackTrace:        at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)        at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive, Boolean throwOnTopLevelDirectoryNotFound)        at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive, Boolean checkHost)        at System.IO.Directory.Delete(String path)        at MyApp.PhotoGallery.Categories.deleteCategory(Int32 cID, String categoryname) in d:\Documents\My Dropbox\web projects\MyAppFolder\App_Code\BLL\PhotoGallery.vb:line 291        at _admhades_PhotoGallery.deleteCategory(Int32 categoryID, String categoryname) in d:\Documents\My Dropbox\web projects\HavadisPre\_admhades\PhotoGallery.aspx.vb:line 71 
like image 209
Subliminal Hash Avatar asked Sep 13 '12 21:09

Subliminal Hash


People also ask

When I try to delete a folder it says directory not empty?

One of the common issues I've encountered is one that involves folders not deleting properly. When this issue occurs, an error message appears that says “Cannot Delete foldername: The directory is not empty“. This problem can happen in Windows 10, 8, and 7. The problem can usually be solved with a Chkdsk scan.

Can not remove directory is not empty?

If the directory is not empty or you do not have permission to delete it, you will see an error message. To remove a directory that is not empty, use the rm command with the -r option for recursive deletion.

What does it mean when it says directory is not empty?

What is error 0x80070091 The directory is not empty? It mainly occurs when you try to delete a folder from an external hard disk or SD card or pen drive, but it can also happen when deleting a file from the system drive.


1 Answers

You may just use Directory.Delete(target_dir, true); to remove directory and all files recursively. You don't have to write custom function.

like image 121
petro.sidlovskyy Avatar answered Oct 05 '22 23:10

petro.sidlovskyy