Avatar billede x4all_dk Nybegynder
07. december 2005 - 21:36 Der er 10 kommentarer og
2 løsninger

Find alle jpg filer!

Jeg skal lave et C program som kan finde alle .jpg filer i en mappe og alle undermapper...

Hvordan gør jeg det i C ?

..gerne komplet kode!
Avatar billede arne_v Ekspert
07. december 2005 - 21:52 #1
#include <stdio.h>
#include <stdlib.h>

#include <windows.h>

void xdir(char *dir, char *ext);

void xdir2(WIN32_FIND_DATA *fnddat, char *dir, char *ext)
{
  char full[MAX_PATH];
  if(fnddat->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  {
      if(fnddat->cFileName[0]!='.')
      {
        sprintf(full,"%s%s\\",dir,fnddat->cFileName);
        xdir(full,ext);
      }
  }
  else
  {
      if(strcmp(fnddat->cFileName + strlen(fnddat->cFileName) - strlen(ext), ext)==0)
      {
          printf("%s%s\n",dir,fnddat->cFileName);
      }
  }
}

void xdir(char *dir,char *ext)
{
  WIN32_FIND_DATA data;
  char spec[MAX_PATH];
  sprintf(spec,"%s*.*",dir);
  HANDLE h = FindFirstFile(spec,&data);
  if(h!=INVALID_HANDLE_VALUE) {
    xdir2(&data,dir,ext);
    while(FindNextFile(h,&data)) {
      xdir2(&data,dir,ext);
    }
  }
  FindClose(h);
}

int main()
{
  xdir("C:\\", ".jpg");
  return 0;
}
Avatar billede arne_v Ekspert
07. december 2005 - 21:52 #2
jeg har tilladt mig at antage windows
Avatar billede x4all_dk Nybegynder
08. december 2005 - 09:12 #3
arne_v:  Det skal være OS uafhængigt!
Avatar billede x4all_dk Nybegynder
08. december 2005 - 09:16 #4
Det er til et commandline tool.
Avatar billede arne_v Ekspert
08. december 2005 - 14:35 #5
efter min bedste overbevisning kan det ikke laves OS uafhængigt

jeg kan lave det samme til Unix/Linux med readdir og stat
Avatar billede x4all_dk Nybegynder
08. december 2005 - 16:20 #6
Ok, jeg troede man kunne lave det OS uafhængigt.

Så skal det laves til Unix/linux, kan du klare det arne_v ?
Avatar billede arne_v Ekspert
08. december 2005 - 17:02 #7
det vil jeg da tro
Avatar billede x4all_dk Nybegynder
09. december 2005 - 13:07 #8
Følgende kode udskriver alle filer i et bib. og dets underbiblioteker,
men.. hvordan får jeg fat i dem som er ".jpg" filer ?


#include <stdio.h>
#include <stdlib.h>

#include <dirent.h>
#include <sys/stat.h>

#define DIRSEP "/"
#define TESTDIR "/home/test"

void process(char *path)
{
  DIR *dirp;
  struct dirent *entp;
  struct stat stbuf;
  char fnm[256];
  dirp = opendir(path);
  while((entp = readdir(dirp)) != NULL)
  {
        if(entp->d_name[0]!='.')
      {
          sprintf(fnm,"%s%s%s",path,DIRSEP,entp->d_name);         
          stat(fnm,&stbuf);
          if(!S_ISDIR(stbuf.st_mode))
            {
              printf("%s\n",fnm);
            }
          else
          {
            process(fnm);   
          }
      }
  }
  closedir(dirp);
  return;
}

int main()
{
  process(TESTDIR);
  return 0;
}
Avatar billede arne_v Ekspert
09. december 2005 - 14:01 #9
det ligner noget fra et gammelt spm. her

:-)

strcmp testet er stort set det samme som i win32 versionen
Avatar billede x4all_dk Nybegynder
19. december 2005 - 09:30 #10
Hej arne_v.

Du får andel i pointene da jeg anvendte dele af dit windows svar,
så smid et svar!
Avatar billede arne_v Ekspert
19. december 2005 - 10:04 #11
ok
Avatar billede x4all_dk Nybegynder
19. december 2005 - 16:45 #12
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester