Avatar billede beeblebrox Nybegynder
20. april 2004 - 13:23 Der er 11 kommentarer og
1 løsning

Adgang til filer og biblioteker (directories)

Jeg ønsker at lave et program der kan gennemløbe et bibliotek (mappe). Fortælle  mig hvilke filer der er i det bibliotek, og hvilker underbiblioteker der er.

Den funktion er ikke en del af standard c++.

Hvad skal jeg gøre?

(Hvis jeg først kan gennemløbe filer og biblioteker (mappper) er resten ikke noget problem.)
Avatar billede arne_v Ekspert
20. april 2004 - 13:30 #1
Windows:

FindFirstFile/FindNextFile/FindClose

Linux:

opendir/readdir/closedir
Avatar billede arne_v Ekspert
20. april 2004 - 13:32 #2
Windows - ikke rekursivt:

#include <stdio.h>

#include <windows.h>

int main()
{
  WIN32_FIND_DATA data;
  HANDLE h = FindFirstFile("*.*",&data);
  if(h!=INVALID_HANDLE_VALUE) {
    printf("%s\n",data.cFileName);
    while(FindNextFile(h,&data)) {
        printf("%s\n",data.cFileName);
    }
  }
  FindClose(h);
  return 0;
}
Avatar billede arne_v Ekspert
20. april 2004 - 13:34 #3
Linux rekursivt (kan også bruges på Windows med passende lib):

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

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

#define DIRSEP "/"
#define TESTDIR "/home/arne"

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
20. april 2004 - 13:34 #4
OK ?
Avatar billede beeblebrox Nybegynder
20. april 2004 - 13:37 #5
Det ser jo let nok ud :)

Det skal laves i windows. (Havde det været til linus/unix havde jeg brugt LEDA)

Hvor kan jeg se noget dokumentation til metoderne?
Hvordan ser jeg størelserne på filerne?
Hvordan ser jeg om data er blevet en reference til en fil eller en mappe?
og Hvordan giver jeg dig de point jeg har sat på højkant?

Mange tak.
Avatar billede arne_v Ekspert
20. april 2004 - 13:40 #6
Med størrelse:

#include <stdio.h>

#include <windows.h>

int main()
{
  WIN32_FIND_DATA data;
  HANDLE h = FindFirstFile("*.c",&data);
  if(h!=INVALID_HANDLE_VALUE) {
    printf("%s %d %d\n",data.cFileName,data.nFileSizeHigh,data.nFileSizeLow);
    while(FindNextFile(h,&data)) {
        printf("%s %d %d\n",data.cFileName,data.nFileSizeHigh,data.nFileSizeLow);
    }
  }
  FindClose(h);
  return 0;
}
Avatar billede arne_v Ekspert
20. april 2004 - 13:42 #8
if(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
Avatar billede arne_v Ekspert
20. april 2004 - 13:43 #9
marker navn
klik accepter
Avatar billede beeblebrox Nybegynder
20. april 2004 - 13:45 #10
Tør jeg spørge hvilken oversætter der er brugt? (Eller forventet brugt?)
Avatar billede arne_v Ekspert
20. april 2004 - 13:50 #11
Hvis du bruger Win32 API (FindFirstFile/FindNextFile/FindClose) så bør enhver
Windows compiler kunne bruges: MS Visual C++, Borland C++ Builder, Dev-Cpp/MingW.

Bare:

#include <windows.h>
Avatar billede beeblebrox Nybegynder
20. april 2004 - 13:54 #12
Det lyder næsten for let til at være sandt :)

Jeg vil jeg straks undersøge så snart jeg kan/vil/tør forlade mit studie.

Mange tak for hjælpen. :)
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