Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Блокируются папки при рекурсивном удалении


Автор: Bekass 6.2.2013, 12:07
Доброго дня. Есть  Web service,  в нем рекурсивная функция удаления  папки, вместе с вложенными в нее папками и файлами. 

Удаление делаю через kernel32.dll

Код


   public static void DeleteDir(string directory)
        {
           
            WIN32_FIND_DATA findData;

            IntPtr findHandle = FindFirstFile(directory + @"\*", out findData);

            if (findHandle != INVALID_HANDLE_VALUE)
            {
                bool found;

                do
                {
                    string currentFileName = findData.cFileName;
                    try
                    {
                        if (((int)findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
                        {
                            if (currentFileName != "." && currentFileName != "..")
                            {
                                SetFileAttributes(directory + "\\" + currentFileName, 0);
                                DeleteDir(directory + "\\" + currentFileName);
                            }
                        }
                        else
                        {
                            SetFileAttributes(directory + "\\" + currentFileName, 0);
                            //System.WindowsNT.IO.NtFile.Delete(@"\DosDevices\" + directory + "\\" + currentFileName);
                            File.DeleteFile(directory + "\\" + currentFileName);
                        }
                        
                    }
                    catch (Exception e)
                    {
                        LogWrite("DELETE ERROR " + @"\DosDevices\" + directory + "\\" + currentFileName);
                    }
                    found = FindNextFile(findHandle, out findData);
                }
                while (found);
            }
            FindClose(findHandle);
            File.DeleteFolder(directory);
            //System.WindowsNT.IO.NtFile.Delete(@"\DosDevices\" + directory);
            
        }
 [DllImport("kernel32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool RemoveDirectory(string lpPathName);

 [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool DeleteFile(string lpFileName);



Проблема в том что иногда (следствия обнаружить не могу)  IIS   не удаляет папку а блокируе Access Denided,  до тех пор пока не перезапускаю IIS , После перезапуска папки сами удаляюся.

В чем  может быть проблема, есть ли способы удалять такие файлы ?

Спасибо.

Автор: Machaon 9.2.2013, 16:13
Если ты сам писал функцию или класс в котором ты работаешь с этими файлами, то наверняка ты просто не закрываешь поток в котором открываешь файл или присутствуют события при котором закрытие не обрабатывается.
 Проверь с помощью try cath.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)