Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Помогите пожалуйста найти ошибку


Автор: oper54 16.3.2006, 14:12
Доброе время суток.
Вот написал ф-цию удаления директории, а она не работает, не могу понять почему smile
Помогите пожалуйста найти ошибку
Код

bool __fastcall TForm1::DeleteDirectory(AnsiString Path){
        WIN32_FIND_DATA ffd;
        AnsiString      _path(Path + "\\" + "*.*");
        HANDLE          hFile = FindFirstFile(_path.c_str(), &ffd);

        if(INVALID_HANDLE_VALUE == hFile)
                return RemoveDirectory(Path.c_str()) ? true : false;
        while(FindNextFile(hFile, &ffd))
                if((ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
                   ((strcmp(ffd.cFileName, "..") != 0) &&
                    (strcmp(ffd.cFileName, ".")  != 0)))
                                DeleteDirectory(Path + "\\" + ffd.cFileName);
                else DeleteFile(Path + "\\" + ffd.cFileName);
        return RemoveDirectory(Path.c_str()) ? true : false;
}

Автор: _hunter 16.3.2006, 15:03
сам посмотри.
не работает на каком этапе? -- на этапе поиска или на этапе удаления.
когда это определиш -- создай тестовый случай...

Автор: oper54 16.3.2006, 15:26
на этапе удаляения директории, файлы удаляет а директории не хочет.
Цитата

сам посмотри.

смотрел пробовал не пойму в чем прокол, по этому и выложил на всеобщее обозрение
Добавлено @ 15:27
все вроде правильно, но не работает

Автор: _hunter 16.3.2006, 16:10
что RemoveDirectory и GetLastError возвращают?

Автор: oper54 16.3.2006, 16:54
Код

32 - ERROR_SHARING_VIOLATION
The process cannot access the file because it is being used by another process.

Ничем не занята директория это точно + файлы из директорий удаляются.
Добавлено @ 16:58
хотя моя программа может рекурсией занять

Автор: oper54 16.3.2006, 17:35
Все разобрался все просто
Код

bool __fastcall TForm1::DeleteDirectory(AnsiString Path){    
        WIN32_FIND_DATA ffd;    
        HANDLE          hFile = FindFirstFile((Path + "\\" + "*.*").c_str(), &ffd);    

        if(INVALID_HANDLE_VALUE == hFile)    
                return RemoveDirectory(Path.c_str()) ? true : false;    
        while(FindNextFile(hFile, &ffd))    
                if((ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&    
                   ((strcmp(ffd.cFileName, "..") != 0) &&    
                    (strcmp(ffd.cFileName, ".")  != 0)))    
                                DeleteDirectory(Path + "\\" + ffd.cFileName);    
                else DeleteFile(Path + "\\" + ffd.cFileName);    
        FindClose(hFile);//!!! ВОТ ОНО !!!
        return RemoveDirectory(Path.c_str()) ? true : false;    
}

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