/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
At finde filer på linux
Fra : Jonas Jalling


Dato : 03-06-03 09:22

Hej,

Jeg er gået helt i stå. Jeg har brug for at scanne et dir (med subdirs), for
filer med en bestemt endelse og smide dem ned i et array, med fuld sti. Jeg
går
ud fra at det er scandir jeg skal bruge, men jeg synes ikke at jeg kan komme
igang.

Er der ikke nogen der har et clue til hvordan det skal gøres? (bemærk at
programmet skal køre på linux)

--
Med venlig hilsen
Jonas Jalling



 
 
Igor V. Rafienko (03-06-2003)
Kommentar
Fra : Igor V. Rafienko


Dato : 03-06-03 12:14

[ Jonas Jalling ]

[ ... ]

> Er der ikke nogen der har et clue til hvordan det skal gøres? (bemærk at
> programmet skal køre på linux)


@Book{unix:stevensAPUE,
author = {Stevens, W. Richard},
title = {Advanced Programming in the {UNIX} Environment},
publisher = AW,
address = {Reading, MA, USA},
pages = {xviii + 744},
year = 1992,
ISBN = {0-201-56317-7},
LCCN = {QA76.76.O63 S754 1992}
}





ivr
--
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?

Bertel Brander (03-06-2003)
Kommentar
Fra : Bertel Brander


Dato : 03-06-03 16:35

Jonas Jalling wrote:
> Hej,
>
> Jeg er gået helt i stå. Jeg har brug for at scanne et dir (med subdirs), for
> filer med en bestemt endelse og smide dem ned i et array, med fuld sti. Jeg
> går
> ud fra at det er scandir jeg skal bruge, men jeg synes ikke at jeg kan komme
> igang.
>
> Er der ikke nogen der har et clue til hvordan det skal gøres? (bemærk at
> programmet skal køre på linux)
>
Jeg har ikke linux, men har lavet et lille program med cygwin, det
burde virke på linux også. Jeg er dog ikke sikker på at include filerne
hedder det samme på linux.
Du kører programmet med den extension du ønsker at liste som argument
(uden '.'), og så vil det liste alle filer med den extension i nuværende
direktorie og underdirektorier.
Jeg håber det kan bruges som en start.

#include <stdio.h>
#include <stdlib.h>
#include <sys/dirent.h>
#include <sys/unistd.h>

void check_ext(const char *name, const char *ext)
{
if(strlen(name) > strlen(ext))
{
const char *s = &name[strlen(name) - strlen(ext)];
if(!strcmp(s, ext) && s[-1] == '.')
{
printf("Dir> %s\n", name);
}
}
}

void scan(const char *dir, const char *ext)
{
DIR *d = opendir(dir);
if(d)
{
struct dirent *dirent;
while((dirent = readdir(d)) != NULL)
{
if(strcmp(dirent->d_name, ".") && strcmp(dirent->d_name, ".."))
{
char sub[256];
sprintf(sub, "%s/%s", dir, dirent->d_name);
scan(sub, ext);
check_ext(sub, ext);
}
}
closedir(d);
}
}

int main(int argc, char *args[])
{
char dir[256];

if(argc != 2)
{
fprintf(stderr, "Usage: %s ext\n", args[0]);
return EXIT_FAILURE;
}
getcwd(dir, sizeof(dir));
scan(dir, args[1]);

return EXIT_SUCCESS;
}

/b


Jonas Jalling (03-06-2003)
Kommentar
Fra : Jonas Jalling


Dato : 03-06-03 17:07

Bertel Brander wrote:
<snip>
> Jeg har ikke linux, men har lavet et lille program med cygwin, det
> burde virke på linux også. Jeg er dog ikke sikker på at include
> filerne hedder det samme på linux.
> Du kører programmet med den extension du ønsker at liste som argument
> (uden '.'), og så vil det liste alle filer med den extension i
> nuværende direktorie og underdirektorier.
> Jeg håber det kan bruges som en start.
<snip - et glimrende eksempel>

Hej Bertel,

Det var lige hvad jeg manglede. Mange tak for hjælpen.

--
Med venlig hilsen
Jonas Jalling



Bertel Brander (03-06-2003)
Kommentar
Fra : Bertel Brander


Dato : 03-06-03 22:30

Jonas Jalling wrote:

> Bertel Brander wrote:
> <snip>
>
>>Jeg har ikke linux, men har lavet et lille program med cygwin, det
>>burde virke på linux også. Jeg er dog ikke sikker på at include
>>filerne hedder det samme på linux.
>>Du kører programmet med den extension du ønsker at liste som argument
>>(uden '.'), og så vil det liste alle filer med den extension i
>>nuværende direktorie og underdirektorier.
>>Jeg håber det kan bruges som en start.
>
> <snip - et glimrende eksempel>
>
> Hej Bertel,
>
> Det var lige hvad jeg manglede. Mange tak for hjælpen.
>
Lige en note, hvis du har et direktorie med den extension som du leder
efter, vil dette blive listet også. Så du bør måske lave et check på om
et entry er en fil eller et direktorie. Du kan måske bruge access() til
det formål (på Windows ville man nok bruge stat() men jeg ved ikke om
den findes på Linux).

/b


Robert Larsen (04-06-2003)
Kommentar
Fra : Robert Larsen


Dato : 04-06-03 10:45

Bertel Brander wrote:
> Jonas Jalling wrote:
>
>> Bertel Brander wrote:
>> <snip>
>>
>>> Jeg har ikke linux, men har lavet et lille program med cygwin, det
>>> burde virke på linux også. Jeg er dog ikke sikker på at include
>>> filerne hedder det samme på linux.
>>> Du kører programmet med den extension du ønsker at liste som argument
>>> (uden '.'), og så vil det liste alle filer med den extension i
>>> nuværende direktorie og underdirektorier.
>>> Jeg håber det kan bruges som en start.
>>
>>
>> <snip - et glimrende eksempel>
>>
>> Hej Bertel,
>>
>> Det var lige hvad jeg manglede. Mange tak for hjælpen.
>>
> Lige en note, hvis du har et direktorie med den extension som du leder
> efter, vil dette blive listet også. Så du bør måske lave et check på om
> et entry er en fil eller et direktorie. Du kan måske bruge access() til
> det formål (på Windows ville man nok bruge stat() men jeg ved ikke om
> den findes på Linux).
>
> /b
>
stat() er svjv. en ansi c funktion så den burde findes på alle
platforme. I hvert fald findes den på Linux.


struct stat st;
char * path = .....;
if(stat(path, &st) != 0)
{
/* Handle error */
}
else if(S_ISDIR(st.st_mode))
{
/* Do stuff with directory */
}
else
{
/* Do stuff with file */
}


Bertel Brander (04-06-2003)
Kommentar
Fra : Bertel Brander


Dato : 04-06-03 12:35

Robert Larsen wrote:

>>
> stat() er svjv. en ansi c funktion så den burde findes på alle
> platforme. I hvert fald findes den på Linux.
>
>
stat er ikke en ANSI-C funktion.

/b


Soren Davidsen (04-06-2003)
Kommentar
Fra : Soren Davidsen


Dato : 04-06-03 18:40

Bertel Brander <bertel@post4.tele.dk> writes:

> Robert Larsen wrote:
>
> >>
> > stat() er svjv. en ansi c funktion så den burde findes på alle
> > platforme. I hvert fald findes den på Linux.
> >
> stat er ikke en ANSI-C funktion.

Men en Posix funktion, hvilket sikkert var hvad Robert mente - ikke ?


Mvh,

--
___
Soren Davidsen / o\
Deliver yesterday, code today, think tomorrow. (_____)
__ http://www.tanesha.net/ _________________________________(___)_______

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste