Avatar billede spiritusanta Nybegynder
19. januar 2004 - 22:07 Der er 12 kommentarer og
2 løsninger

Vise alle filer i en mappe

Jeg arbejder i c++ builder 5
Hvordan kan jeg få en liste over alle filer i en bestemt mappe, eks. C:\test\musik\ ?

Ved at klikke på en af filerne skal den være til at afspille i et standart afspilnings program, som eks. windows media player.
Avatar billede arne_v Ekspert
19. januar 2004 - 22:13 #1
En mulighed er FindFirstFile og FindNextFile.

Her er et lille eksempel som finder alle filer i C:\test:

#include <stdio.h>

#include <windows.h>

int main()
{
  WIN32_FIND_DATA data;
  HANDLE h = FindFirstFile("C:\\test\*.*",&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;
}

(console app, men teknikken er den samme)
Avatar billede arne_v Ekspert
19. januar 2004 - 22:13 #2
Der mangler slash - sorry.

#include <stdio.h>

#include <windows.h>

int main()
{
  WIN32_FIND_DATA data;
  HANDLE h = FindFirstFile("C:\\test\\*.*",&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 spiritusanta Nybegynder
19. januar 2004 - 22:15 #3
Kan du hurtigt give mig et eksempel på hvor jeg skal indsætte koden, så den kan bruge i builder?
Avatar billede arne_v Ekspert
19. januar 2004 - 22:25 #4
Nej - fordi jeg ved ikke hvordan du skal bruge filnavnene.

Men det må være noget a la:

  WIN32_FIND_DATA data;
  HANDLE h = FindFirstFile("C:\\test\\*.*",&data);
  if(h!=INVALID_HANDLE_VALUE) {
    // behandl data.cFileName
    while(FindNextFile(h,&data)) {
        // behandl data.cFileName
    }
  }
  FindClose(h);
Avatar billede spiritusanta Nybegynder
19. januar 2004 - 22:34 #5
Det er bare fordi der i C++ er en komponent, der hedder en listfilebox, der kan liste filer..... men spørgsmålet er bare, hvordan man bruger den uden af væreafhængig af en anden komponent, som viser vej til mappen, men bare en sti man selv definere
Avatar billede arne_v Ekspert
19. januar 2004 - 23:00 #6
Jeg kender ikke listfilebox, sorry ...
Avatar billede coldplay Nybegynder
20. januar 2004 - 01:13 #7
Har selv CBuilder, men kender ikke TListFileBox klassen.

Til gengæld kender jeg TListBox, som TListFileBox klassen højest sandsynlig er nedarvet fra.

Med andre ord: De egenskaber og metoder som er en del TListBox klassen, findes derfor ligeledes i TListFileBox klassen.

Jeg vil gerne forsøge med noget kodning, som gør brug af TListBox klassen.

Der ligeledes andre aspekter af dit problem, som jeg vil forsøge at hjælpe dig med.
Avatar billede akempff Nybegynder
20. januar 2004 - 08:24 #8
Hvis du bruger en filelistbox så kan du bare selv sætte den sti.
f.eks.  FileListBox1->Directory = "C:\\WINDOWS";
Avatar billede spiritusanta Nybegynder
20. januar 2004 - 11:27 #9
argh akempff... var det bare sådan, men det virker.
Troede først ikke det ville virke, da der ikke stod en "option" om det, ude i siden under enhendes properties, kunne heller ikke finde noget under hjælp.
Fandt ud af, at man også kunne bruge den samme kode under DirectoryListBox, men har lige et spørgs ang. det, er det muligt at skjule dele af stien, så man kun ser de mapper, der ligger i den mappe man har angivet, eks. "C:\\Windows"?

Ellers skal man jo til at dele point ud, er alligevel mange point for det :)
Avatar billede akempff Nybegynder
20. januar 2004 - 14:37 #10
Du må gerne holde pointene for min skyld. Er glad for at kunne hjælpe :)

I din filelistbox´s properties (der til venstre) sætter ftDirectory til true under filetypes og også sætter ftNormal til false, så får du kun directories.  Hvis du gerne vil have små iconer også (ligesom total commander) så sæt ShowGlyphs til true.

Så tror jeg du har det som du gerne vil have det.
Avatar billede spiritusanta Nybegynder
20. januar 2004 - 14:43 #11
Smart :)
Hvordan kan jeg så kører filerne fra min filelistbox?
Avatar billede spiritusanta Nybegynder
20. januar 2004 - 15:37 #12
men tak for hjælpen :)
Avatar billede spiritusanta Nybegynder
20. januar 2004 - 15:38 #13
Tjaa fik jo ikke lige det helt præcise svar af dig arne_v.... men alligevel tak for hjælpen :)
Avatar billede spiritusanta Nybegynder
16. marts 2005 - 15:25 #14
hehe mange mange mange tak for hjælpen arne_v, du fortjener næsten flere point nu :D

Var vist lidt nybegynder på det tidspunkt, hvor jeg programmerede i borlands grafiske c++ sjaw.

Jeg programmere nu i forbindelse med mit studie på IHA(IngeniørHøjskolenAarhus) udelukkende i consol programmering og her skulle jeg faktisk lige bruge den kode du skrev i dit første indlæg og den virker.. modificerede lige koden, men tjaa, mange tak :)

#include <stdio.h>
#include <iostream>
using namespace std;

#include <windows.h>

int main()
{
  WIN32_FIND_DATA data;
  HANDLE h = FindFirstFile("F:\\Entertainment\\Pictures\\*.*",&data);
if(h!=INVALID_HANDLE_VALUE) {
    while(FindNextFile(h,&data)) {
        cout << data.cFileName << endl;
        //printf("%s %d %d\n",data.cFileName,data.nFileSizeHigh,data.nFileSizeLow);
  }
}
  FindClose(h);
  return 0;
}
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