[c] Czytanie folderu

0

Witam,

Napisałem program, który działa bez problemów na moim systemie. Gdy wrzuciłem go na uczelniany serwer przestał jednak działać:/ Niżej umieszczam kodzik. Nie wiem dlaczego tak się dzieje. Prosiłbym o pomoc w znalezieniu błędu, którego kompilator na uczelnianym serwerze nie akceptuje. Dodam, że kompiluje z -pedantic -Wall i nie wyświetla błędów :/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <errno.h>
void listdir( char * path, int level )
{
  char namebuf[1024];    /* bufor do tworzenia nazw podkatalogow */
  struct dirent *entry;  /* zm. robocza do iteracji po pozycjach w katalogu */
  char tmp[80];
  DIR *thisdir= opendir( path );  /* proba otwarcia */

  if( thisdir == NULL ) {  /* nie udalo sie otworzyc path jako katalogu*/
    if( errno != ENOTDIR ) /* ignorujemy blad ENOTDIR (nie-katalog) 
                              - inne bledy zglaszamy */
      printf("Blad - %s.\n", strerror(errno) );
    return;
  }
  while( (entry= readdir( thisdir )) != NULL ) { /* czytamy kolejne pozycje */
    if( !strcmp( entry->d_name,"." ) )
  break;
    printf("Plik %s\n", entry->d_name ); /* wypisanie nazwy */
    strcpy(tmp,"cat ");
    strcat(tmp,path);
    strcat(tmp,"/");
    strcat(tmp,entry->d_name);
    system(tmp);
    printf("\n");

  
    if( strcmp( entry->d_name, "." ) != 0
     && strcmp( entry->d_name, ".." ) != 0 ) {
      strcpy( namebuf, path );          /* tworzymy nazwe */
      strcat( namebuf, "/" );
      strcat( namebuf, entry->d_name );
      listdir( namebuf, level+1 );      /* i wywolujemy rekurencyjnie listdir */
    }
  }
  closedir( thisdir ); /* na koniec zamykamy katalog */
}

int
main( int argc, char **argv )
{
  if( argc == 2 ) {
    listdir( argv[1], 1 );
  }
  return 0;
}

Z góry za pomoc będę bardzo wdzięczny.

0

Przepraszam za post nad postem, ale nie mogę edytować.
Dodałem linijke niżej za while()

printf(" %s\n", entry->d_name ); /* wypisanie nazwy */

Wynik na konsoli na moim komputerze był taki:

./czytajkatalog sd
entry->d_name t1.c 
Plik t1.c
sfsdf

entry->d_name = . 

zaś na uczelnianym:

./czytajkatalog sd
entry->d_name = . 

Wynik z tego, że prawdopodobnie nie wchodzi do katalogu sd ... ale dlaczego ? Help me :(

0
m. napisał(a)

Wynik z tego, że prawdopodobnie nie wchodzi do katalogu sd ... ale dlaczego ? Help me :(

Jakby nie wszedł do katologu to dostałbyś komunikat błędu o braku praw dostępu etc.
Problem jest tutaj

    if( !strcmp( entry->d_name,"." ) )
  break;

Bo nie zawsze kropka jest na końcu listy. Jak chcesz ją pominąć, nie kończąc pętli, zamień break na continue.

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