Söka efter filer/mappar i C

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
net4all
Inlägg: 538
Blev medlem: 7 februari 2007, 12:06:34

Söka efter filer/mappar i C

Inlägg 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!
Användarvisningsbild
Icecap
Inlägg: 26635
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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å.
JJ
Inlägg: 366
Blev medlem: 16 maj 2005, 21:33:02

Inlägg 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.
Användarvisningsbild
Icecap
Inlägg: 26635
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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.
net4all
Inlägg: 538
Blev medlem: 7 februari 2007, 12:06:34

Inlägg 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..
JJ
Inlägg: 366
Blev medlem: 16 maj 2005, 21:33:02

Inlägg 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!
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Inlägg 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.
net4all
Inlägg: 538
Blev medlem: 7 februari 2007, 12:06:34

Inlägg 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å?
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg 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.
...
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg 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.
Skriv svar