rm --recurcive

0

Witam,
potrzebuje napisac funcje ktora kasuje katalogi wraz z jego calą zawartoscią jednak nie dziala ona poprawnie - wchodzi do katalogu ktory ma skasowac przy unlink pliku pokazuje sie ze jest skasowany(w rzeczywistosci ten plik dalej jest) potem kolejne pliki nie chce kasowac - w rekurencji nigdy nie bylem dobry :)

Oto ta funcja napisana w jezyku c:
rm_dir ( char *dir )
{
struct dirent **katalog;
int ile_kat, dir_error, log;
ile_kat = scandir ( dir , &katalog , 0 , alphasort );
int i;
for( i = 2 ; i < ile_kat ; i++ )
{
printf ( "%s: " , katalog[i]->d_name );
log = rmdir ( katalog[i]->d_name );
dir_error = errno;
if( log )
{
if ( dir_error == ENOTEMPTY ) /jezeli katalog !pusty to wejdz do niego i rob znowu rm
_dir wewnatrz katalogu(rekurencja)
/
{
printf ( "katalog nie jest pusty->wejscie do niego\n" );
rm_dir ( katalog[i]->d_name ); /*rekurencja - */

                    }
                    else if ( dir_error == ENOTDIR ) /*jezeli to jest plik*/
                    {
                            printf ( "kasowanie pliku: " );
                            log = unlink ( katalog[i]->d_name );
                            if ( log )
                                     printf ( "blad!\n" );
                            if ( !log )
                                    printf( "skasowany!\n" );
                    }
            }
            else {
                    printf ( "skasowany katalog\n" );
            }

    }

}

0

[rotfl] [rotfl]

Wykasowałem sobie pół katalogu domowego ;] (po moich poprawkach działało, az za dobrze). Niestety kodu nie dostarczę... z niewiadomych mi powodów zniknął

ale klka błędów pamiętam...

scandir zwraca ci listę plików bez scieżki.. wieć przydałoby się jakieś getcwd/chdir
nie probujesz usunąć powtórnie katalogu po wyjściu z rekurencji

0

Jak tak pomysle to masz racje ;) jak taki glupi moglem byc :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1