Sida 1 av 1

Söka efter filer/mappar i C

Postat: 1 augusti 2008, 18:10:26
av net4all
Hej!
Jag skriver ett C-program som ska "rensa upp" i en mapp med massor med små källkodsfiler, som har heltokiga namn.. :(
Det är runt 500Mb text från olika programspråk som måste sorteras.
Sorteringsdelen är nästan klar, dvs avgöra vad en fil är för något och sedan lägga den i en redan befintlig mapp.

Problemet är att "hitta" undermapparna och filerna...
Jag behöver alltså något som typ "dir" under dos fast för C.
(Skriver för Windows, men standardlösningar är bättre :) )

//Tack på förhand!

Postat: 1 augusti 2008, 18:14:54
av Icecap
FindFirst() och FindNext() har jag för mig att de heter, sätt även flagga för bibliotek och de hittar dom också.

Postat: 1 augusti 2008, 19:00:27
av JJ
I C finns system() som gör ett anrop till ditt shell.

http://en.wikipedia.org/wiki/System_%28 ... library%29

Bara för att det finns i C-standarden så är det inte säkert att det finns implementerat på ditt system, jag har aldrig kört det på Windows.

En ide kan vara att köra under CygWin el. liknande, då funkar det säkert.

Postat: 1 augusti 2008, 19:54:43
av Icecap
JJ: vad skulle det lösa?

För att leta sig ner i filer & mappar är system() inte speciellt användbart eller har jag missat något?

Med FindFirst() och FindNext() kan man spara alla filnamn som hittas, kolla om de är bibliotek och sedan söka under dom osv.

Postat: 1 augusti 2008, 20:10:27
av net4all
JJ: Känner till system() och det fungerar utmärkt till Windows.
Men system() är inte portabelt(dir är inte portabelt).

Find-funktionerna verkar passa bra, läser på nu..

Postat: 1 augusti 2008, 20:15:17
av JJ
system("ls -lr");

skulle göra samma sak som ls -lr på kommandoraden, man kan köra godtyckligt shellkommando på det sättet. Jag har för mig att det är lite meckigt dock att få in outputten från ls in i det anropande programmet men man kan göra tex:

systen("ls -l > ls.tmp");

(dvs unix redirect till filen ls.tmp)

och sedan läsa i ls.tmp.

Allt bygger ju på att man har tillämpliga shell-kommandon, ls -r finns inte alltid och på Windows finns inte ls alls!

Mycket möjligt att FindFirst() är bättre...är det standard-C?

Edit: såg inte senaste inägget förstås!

Postat: 1 augusti 2008, 20:54:54
av blueint
Alternativt använd opendir() och readdir() finns även i perl.
Fast för DOS är det nog FindFirst() och FindNext() som gäller.

Postat: 1 augusti 2008, 22:29:03
av net4all
opendir-funktionerna var extremt enkla. :)
Kommer att använda dom, men frågan är om dom är portabla?
Kör MinGW och den hade "dirent.h" så då är det väll stor chans att funktionerna fungerar för linux också?

Postat: 2 augusti 2008, 10:35:04
av cykze
Ja, dom fungerar i Linux också.

Från "man opendir":

Kod: Markera allt

...
CONFORMING TO
       opendir() is present on SVr4, 4.3BSD, and  specified  in  POSIX.1-2001.
       fdopendir() is under consideration for inclusion in the next version of
       POSIX.1.
...

Postat: 1 september 2008, 08:50:55
av bos
net4all skrev:Men system() är inte portabelt(dir är inte portabelt).

Find-funktionerna verkar passa bra, läser på nu..
Find-funktionerna är ännu mindre portabla än system(), men det vet du säkert redan om.