Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

prolazak

[es] :: C/C++ programiranje :: prolazak

Strane: 1 2

[ Pregleda: 8201 | Odgovora: 20 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon prolazak11.08.2001. u 20:58 - pre 232 meseci
Kako da napisem funkciju koja prolazi kroz sve direktorijume, lista fajlove, opet prolazi kroz sve subdirektorijume i lista sve fajlove i kroz subsubdirktorijume... ukratko lista sve fajlove i direktorijume na npr. C: ?
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.rcub.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: prolazak12.08.2001. u 03:22 - pre 232 meseci
Ja sam radio nedavno tako nesto, ali sa win32 API-jem (tj. FindFirstFile i FindNextFile iz win32-a).

Ukoliko te interesuje, mogu da postujem, ali mislim da je negde predator vec davao takav listing.

Toliko.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.infosky.net



+2 Profil

icon Re: prolazak12.08.2001. u 13:14 - pre 232 meseci
Kao sto je tOwk rekao, o tome je vec bilo reci na ovom forumu...znaci za to koristis funkcije FindFirst i FindNext naravno napravis rekurzivnu funkciju koja ce to da radi...

poz.
 
Odgovor na temu

uLtracode
Nemanja Marjanovic
Centar za Moderno Drustvo Sabac
Srbija/Sabac

Član broj: 40
Poruke: 490
*.ptt.yu



Profil

icon Re: prolazak12.08.2001. u 13:24 - pre 232 meseci
http://www.elitesecurity.org/tema.php?TopicID=531

slicna rasprava bila je ovde
I don't need a reason!!!


 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: prolazak12.08.2001. u 15:52 - pre 232 meseci
Citat:
tOwk je napisao:
Ja sam radio nedavno tako nesto, ali sa win32 API-jem (tj. FindFirstFile i FindNextFile iz win32-a).

Ukoliko te interesuje, mogu da postujem, ali mislim da je negde predator vec davao takav listing.

Toliko.


Ajde ako nije problem postuj to sto si radio.
Pozdrav.
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.rcub.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: prolazak13.08.2001. u 00:37 - pre 232 meseci
Evo ga kod, sve je strpano u jedan C fajl, ovo je samo deo, pa je zato osakaen, ali radi osnovni posao.

Kompajlirate ga, dobijete EXE i startujete ga sa jednim parametrom: imenom direktorijuma koji treba da izlista sa slash-om na kraju (npr. "a.exe c:").

Ukoliko je potrebna verzija za UNIX sisteme, recite i preradiu ovo da radi i na njima.

Code:

#include <windows.h>
#include <stdio.h>
#include <string.h>

#define ALLOC(x) malloc(x)
#define FREE(x)  free(x)
#define GRESKA(x) { printf("GRESKA: %sn",x); exit(1); }

int izlistaj_dir(char *imedir);

int main(int argc,char *argv[]) {
// mora argument da ima slash na kraju, npr. c:windows, a ne c:windows
    izlistaj_dir(argv[1]);
    return 0;
}

int izlistaj_dir(char *imedir)
{
    HANDLE pretraga;
    WIN32_FIND_DATA podaci;
    BOOL kraj=1;
    int err,duzina;
    char *putanja;

    duzina=strlen(imedir);
    putanja=(char *) ALLOC(duzina+10);
    if (putanja == NULL) GRESKA("Ne ima memorije!n");
    strncpy(putanja,imedir,duzina+2);
    if (putanja[duzina-1] != '\') {
        strcat(putanja,"\");
    }
    strcat(putanja,"*.*");

    pretraga=FindFirstFile(putanja,&podaci);
    if (pretraga == INVALID_HANDLE_VALUE) GRESKA("NESTO NE VALJA!n");
    FREE(putanja); putanja=NULL;
    kraj=1;
    while (kraj == 1)
    {
        if ((podaci.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
        {
            if ((strcmp(podaci.cFileName,".") != 0) &&
                (strcmp(podaci.cFileName,"..") != 0))
            {
                putanja=(char *) ALLOC(duzina + strlen(podaci.cFileName) + 3);
                if (putanja == NULL) GRESKA("Nema memorije!n");
                strncpy(putanja,imedir,duzina+2);
                strcat(putanja,podaci.cFileName);
                if (putanja[strlen(putanja)-1] != '\') {
                    strcat(putanja,"\");
                }
                fprintf(stderr,"Ulazi u dir: %sn",putanja);
                printf("%s%s\n",
                    imedir,
                    podaci.cFileName
                );
                izlistaj_dir(putanja);
                FREE(putanja);putanja=NULL;
            }
        } else {
            printf("%s%sn",
                imedir,
                podaci.cFileName
            );
        }


        if (!FindNextFile(pretraga,&podaci))
        {
            err=GetLastError();

            if (err == ERROR_NO_MORE_FILES)
            {
                FindClose(pretraga);
                kraj=0;
            }
        }
    }
    return err;
}


I na kraju, naravno,
Toliko.

Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.InfoSky.Net



+2 Profil

icon Re: prolazak13.08.2001. u 14:46 - pre 232 meseci
Sve je OK, samo sam hteo da napomenem da je ovo:
Code:

#define GRESKA(x) { printf("GRESKA: %s\n",x); exit(1); } 

moglo da se napise kao:
Code:

#define GRESKA(x) printf("GRESKA: %s\n",x), exit(1) 


poz.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: prolazak (o search-u)13.08.2001. u 15:54 - pre 232 meseci
Nas narod boluje od bolesti zvana "lenjost".

Pogledajte, na svakoj strani postoji SEARCH! - Unesete recimo "direktorijum" u pomenuti pretrazivac i da vidite sta sve tamo dobijeteeee! ))

P.S. pretrazivac se nalazi na dnu svake strane...

Dejan


Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.InfoSky.Net



+2 Profil

icon Re: prolazak13.08.2001. u 23:30 - pre 232 meseci
Pretrazivanje zna ponekad da oduzme dosta vremena...

poz.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.fwi.com



Profil

icon Re: prolazak14.08.2001. u 17:24 - pre 232 meseci
Pogledaj starije clanke ja sam prikazao kako uz pomoc rekuzrzije i C standradnih funkcija mozes da prelistas sve direktorijume.
Za deo koda mozes da pogledas :

nonenone.2y.net/download/programms i trazi logcleaner.c koji linkuje na /dev/null
 
Odgovor na temu

uLtracode
Nemanja Marjanovic
Centar za Moderno Drustvo Sabac
Srbija/Sabac

Član broj: 40
Poruke: 490
*.ptt.yu



Profil

icon Re: prolazak14.08.2001. u 19:17 - pre 232 meseci
Citat:
predator je napisao:
Pogledaj starije clanke ja sam prikazao kako uz pomoc rekuzrzije i C standradnih funkcija mozes da prelistas sve direktorijume.
Za deo koda mozes da pogledas :

nonenone.2y.net/download/programms i trazi logcleaner.c koji linkuje na /dev/null


ma dao sam im ja link oni idalje se prave ludi (ovaj kajla kao oduzima vreme pa napisao sve i to ti oduzima vreme jedan klik) ja uvek idem prvo pretraga pa tek onda nesto pitam
I don't need a reason!!!


 
Odgovor na temu

tuzlaorg

Član broj: 286
Poruke: 285
*.dsl.mindspring.com

Sajt: www.tuzlaorg.com


+1 Profil

icon Re: prolazak14.08.2001. u 20:07 - pre 232 meseci
man find
pod linuxom.?
sto se mucite da radite nesto sTo je vec uradjenO>?
Friends don`t let friends do FAT! Friends let friends do ext3 :)
 
Odgovor na temu

Dusan Marjanovic
Consultant, SAS
Beograd

Član broj: 59
Poruke: 1290
*.ptt.yu

Jabber: dusanm@gmail.com
ICQ: 84621598
Sajt: marjanovic.net


+6 Profil

icon Re: prolazak14.08.2001. u 20:42 - pre 232 meseci
pa tako se uci...ne moze covek odma da krene da pravi programe od 100000 linija koda, i kad se uci sistemsko programiranje krene se od pisanja aplikacija tipa ls, cat i slicnih jer sve to ima primenu u vecim programima a lakse je objasniti na manjem kodu a uz to su svi ti programi veoma poznati.
VMware VCP/Microsoft MCSE 2003/HP ASE
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
*.175.EUnet.yu

ICQ: 44582291


+58 Profil

icon Re: prolazak15.08.2001. u 00:38 - pre 232 meseci
btw jel moze neko da mi objasni zasto se prvo koristi funkcija tipa find_first_file pa onda find_next_file tj zasto je to tako uvedeno

zar nisu mogli da uvedu jednu funkciju npr Find_Matching_File ili tako nesto
koja ce da trazi lepo sve fajlove koji zadovoljavaju zadati kriterijum
a ne prvo nadji prvi pa onda nadji sledeci takav....malo mi je glup sistem

-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.rcub.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: prolazak15.08.2001. u 03:52 - pre 232 meseci
Citat:
Mikky je napisao:
btw jel moze neko da mi objasni zasto se prvo koristi funkcija tipa find_first_file pa onda find_next_file tj zasto je to tako uvedeno

zar nisu mogli da uvedu jednu funkciju npr Find_Matching_File ili tako nesto
koja ce da trazi lepo sve fajlove koji zadovoljavaju zadati kriterijum
a ne prvo nadji prvi pa onda nadji sledeci takav....malo mi je glup sistem


Opet bi se trebalo staviti u poziciju nekoga ko to implementira.

Recimo da ti trazis informacije o fajlovima "*.tex", i posaljes poziv FindMeAllFiles("*.tex") koji ti alocira svu potrebnu memoriju (recimo 2MB da smesti sve fajlove, datume pravljenja i izmene istih, dozvole/atribute i slicno). E sad, ova funkcija ti vraca pointer, i ti naravno moras da saznas da li je doslo do greske. I zato pozivas neku funkciju WasThereEverAnError, koja ti vraca da li je bilo greske. I, sad ti ustanovis da je bilo greske. I na kraju, ti meni reci gde je doslo do greske???? Sta uraditi ako je doslo do greske izmedju 6. i 7. fajla?? Nastaviti? Prekinuti? Ponoviti?

Naravno, ovde smo zanemarili cinjenicu da bi ti (programer) mogao da zaboravis da dealociras memoriju, i svih 2MB bi se vuklo bespotrebno.

Zato, kao i mnoge druge operacije, sav posao podeljen je u tri faze: pocetak/inicijalizacija posla, sam posao, i okoncavanje posla. Ne znam zasto ti to nije cudno pri upotrebi jednog fajla, a pri citanju iz direktorijuma (koji je u osnovi i sam fajl), to izgleda cudno.

imamo fopen + prvi fread ekv. FindFirstFile()
zatim, fread ekv. FindNextFile()
i na kraju fclose ekv. FindClose()

Naravno, u fajlu "dirent.h" se nalaze zaglavlja za opendir, readdir, closedir funkcije na POSIX sistemima, a moze ih biti i na nekim drugim platformama (Mingw GCC za Win32 ga sadrzi), koji se onda koriste isto kao i funkcije za citanje fajlova.

Zato zapitaj se kada ti je postalo prirodno da se fajlovi na taj nacin citaju, i gde se nalazi granica zasto bi ti citanje direktorijuma bilo cudno ukoliko se odvija na isti nacin. Meni se cini da bi jedino mesto zabune moglo biti to sto se pri citanju direktorijuma pri iniciranju citanja, istovremeno i ucita prvi podatak, ali to je zato sto se "format" direktorijuma poznaje.


Toliko.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.infosky.net



+2 Profil

icon Re: prolazak15.08.2001. u 11:55 - pre 232 meseci
Citat:
uL7r4C0d3 je napisao:
ma dao sam im ja link oni idalje se prave ludi (ovaj kajla kao oduzima vreme pa napisao sve i to ti oduzima vreme jedan klik) ja uvek idem prvo pretraga pa tek onda nesto pitam

Ma kad je leka napisao pretrazivanje ja sam reako da pretrazivanje u principu zna da oduzme dosta vremena, a to sto passenger (pokretac teme) nije otisao na tvoj link to moras pitati njega.

poz.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.fwi.com



Profil

icon Re: prolazak15.08.2001. u 16:42 - pre 232 meseci
Citat:
kajla je napisao:
Sve je OK, samo sam hteo da napomenem da je ovo:
Code:

#define GRESKA(x) { printf("GRESKA: %sn",x); exit(1); } 

moglo da se napise kao:
Code:

#define GRESKA(x) printf("GRESKA: %sn",x), exit(1) 


poz.


Samo sto je prvo blok naredbi a drugo su dve naredbe (pozivi za dve funkcije)
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: prolazak16.08.2001. u 01:28 - pre 232 meseci
Meni opet treba pomoc. Naime kako se u predatorovom kodu postize da se poziva stalno jedan te isti dir. Na primer otvori prvi dir, udje u taj prvi dir, i unjemu ima 3 dira otvori prvi dir od ta tri prva i posto u njemu nema nista vraca se chdir(".."); e sada kako se poziva drugi po redu direktorijum, pa onda treci itd. gde se to pamti ???
Ujedno da li funkcije findfirst() i findnext() mogu da se upotrebe na direktorijumima a ne samo na fajlovima?
Uf ... nadam se da sam jasno postavio pitanje.
Pozdrav.

[Ovu poruku je menjao passanger dana 08-16-2001 u 01:40 AM GMT]
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.fwi.com



Profil

icon Re: prolazak16.08.2001. u 01:44 - pre 232 meseci
Pa to se pamti u prethodnoj funkciji gde je stao ;o)

Znaci in prvo cita jedan dir kad tu nadje dir poziva funkciju i sad njega cita kad njega zavrsi zavrsava se funkcija i onda se nastavlja tamo gde je prethodna funkcija stala ;o)
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: prolazak16.08.2001. u 16:16 - pre 232 meseci
Da, da, prevideo sam to, malo mi je bilo nejasno ali sada je ok. Hvala.
Pozdrav.
 
Odgovor na temu

[es] :: C/C++ programiranje :: prolazak

Strane: 1 2

[ Pregleda: 8201 | Odgovora: 20 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.