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

prolazak

[es] :: C programiranje :: prolazak

Strane: 1 2

[ Pregleda: 2866 | Odgovora: 20 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milan Aksic

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



Profil

icon prolazak11.08.2001. u 20:58

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: ?
11.08.2001. u 20:58 

tOwk
Danilo Šegan
Zemun/Beograd

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

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


Profil

icon Re: prolazak12.08.2001. u 03:22
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.
12.08.2001. u 03:22 

kajla
Milorad Janković
Beograd

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



Profil

icon Re: prolazak12.08.2001. u 13:14
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.
12.08.2001. u 13:14 

uLtracode
Nemanja Marjanovic
Centar za Moderno Drustvo Sabac - http://www.sabac.or..
Srbija/Sabac

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

ICQ: 95503663
Sajt: www.sabac.org.yu


Profil

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

slicna rasprava bila je ovde
I don't need a reason!!!
http://www.sabac.org.yu/


12.08.2001. u 13:24 

Milan Aksic

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



Profil

icon Re: prolazak12.08.2001. u 15:52
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.
12.08.2001. u 15:52 

tOwk
Danilo Šegan
Zemun/Beograd

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

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


Profil

icon Re: prolazak13.08.2001. u 00:37
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.
13.08.2001. u 00:37 

kajla
Milorad Janković
Beograd

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



Profil

icon Re: prolazak13.08.2001. u 14:46
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.
13.08.2001. u 14:46 

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

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

Sajt: dejan.lekic.org


Profil

icon Re: prolazak (o search-u)13.08.2001. u 15:54
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
13.08.2001. u 15:54 

kajla
Milorad Janković
Beograd

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



Profil

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

poz.
13.08.2001. u 23:30 

Vojislav Milunovic
tata i mama me izdržavaju
Beograd, Srbija

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

Sajt: nonenone.net


Profil

icon Re: prolazak14.08.2001. u 17:24
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
Oni ostali, ja se raspao...
četničke pesme
get out of ma way you bi***...
Ne čitam pp, ako nekom trebam ima mail : chetnik(na)atlas(tačka)cz
14.08.2001. u 17:24 

uLtracode
Nemanja Marjanovic
Centar za Moderno Drustvo Sabac - http://www.sabac.or..
Srbija/Sabac

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

ICQ: 95503663
Sajt: www.sabac.org.yu


Profil

icon Re: prolazak14.08.2001. u 19:17
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!!!
http://www.sabac.org.yu/


14.08.2001. u 19:17 

tuzlaorg

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

Sajt: www.tuzlaorg.com


Profil

icon Re: prolazak14.08.2001. u 20:07
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 :)
14.08.2001. u 20:07 

Dusan Marjanovic
making things work...
Beograd

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

Jabber: dusanm@gmail.com
ICQ: 84621598
Sajt: www.root.co.yu


Profil

icon Re: prolazak14.08.2001. u 20:42
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.
Putuj evropo, nemoj više čekati na nas...
14.08.2001. u 20:42 

Mikky

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

ICQ: 44582291
Sajt: www.asmdev.net


Profil

icon Re: prolazak15.08.2001. u 00:38
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.
15.08.2001. u 00:38 

tOwk
Danilo Šegan
Zemun/Beograd

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

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


Profil

icon Re: prolazak15.08.2001. u 03:52
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.
15.08.2001. u 03:52 

kajla
Milorad Janković
Beograd

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



Profil

icon Re: prolazak15.08.2001. u 11:55
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.
15.08.2001. u 11:55 

Vojislav Milunovic
tata i mama me izdržavaju
Beograd, Srbija

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

Sajt: nonenone.net


Profil

icon Re: prolazak15.08.2001. u 16:42
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)
Oni ostali, ja se raspao...
četničke pesme
get out of ma way you bi***...
Ne čitam pp, ako nekom trebam ima mail : chetnik(na)atlas(tačka)cz
15.08.2001. u 16:42 

Milan Aksic

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



Profil

icon Re: prolazak16.08.2001. u 01:28
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]
16.08.2001. u 01:28 

Vojislav Milunovic
tata i mama me izdržavaju
Beograd, Srbija

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

Sajt: nonenone.net


Profil

icon Re: prolazak16.08.2001. u 01:44
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)
Oni ostali, ja se raspao...
četničke pesme
get out of ma way you bi***...
Ne čitam pp, ako nekom trebam ima mail : chetnik(na)atlas(tačka)cz
16.08.2001. u 01:44 

Milan Aksic

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



Profil

icon Re: prolazak16.08.2001. u 16:16
Da, da, prevideo sam to, malo mi je bilo nejasno ali sada je ok. Hvala.
Pozdrav.
16.08.2001. u 16:16 

[es] :: C programiranje :: prolazak

Strane: 1 2

[ Pregleda: 2866 | Odgovora: 20 ]

Postavi temu Odgovori

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