Avatar billede netro Nybegynder
22. januar 2006 - 20:15 Der er 11 kommentarer og
1 løsning

Fil-dialogboks

Jeg har en TDialogBox i min app (BCB). I en mappe ligger ca. 4000 filer, men forsøger man at åbne flere end ca. 900, kommer de sidste ikke med - dvs. at OpenDialog->Files->Count altid returnerer ca. 900, selvom det faktiske tal er derover. Hvorfor?

Og er der nogen, der kan sige mig, hvordan der konstrueres en dialogboks, hvor der ikke vælges filer men derimod mapper?
Avatar billede segmose Nybegynder
23. januar 2006 - 10:18 #1
Hej
  Må jeg se lidt kode?
Avatar billede netro Nybegynder
23. januar 2006 - 11:32 #2
Det må du gerne. Den er meget simpel:

TOpenDialog * OpenDialog_Files = new TOpenDialog(this);
OpenDialog_Files->Options << ofAllowMultiSelect;
OpenDialog_Files->Filter = "Supported types|*.mp2;*.mp3;*.wmv;*.ogg;*.wma;*.wav;*.flac;*.asf;*.acc| All files (*.*)|*.*|";
OpenDialog_Files->Title = "Add file(s)";
if(OpenDialog_Files->Execute())
{
  char * path;
  for(int i = 0; i < OpenDialog_Files->Files->Count; i++) {
    path = OpenDialog_Files->Files->Strings[i].c_str();
    ListBox_Files->Items->AddObject(getfilename(path).c_str(), new listitem(path));
  }
  Label_FileCount->Caption = ListBox_Files->Items->Count;
}
delete OpenDialog_Files;
Avatar billede netro Nybegynder
23. januar 2006 - 11:35 #3
Løkken løber altså kun fra 0-900. I andre tilfælde kan den dog løbe flere gange, men den tager altid kun 1/3 eller 1/4 af filerne, hvis der tilføjes "mange".
Avatar billede segmose Nybegynder
23. januar 2006 - 12:55 #4
kan du sætte dit filer til at vise alle filer og derefter vælge alle filer, hvad er count så?

Potentiel fejl (men har ikke noget med din count at gøre) path kan være ugyldig i anden linie:
    path = OpenDialog_Files->Files->Strings[i].c_str();
    ListBox_Files->Items->AddObject(getfilename(path).c_str(), new listitem(path));

enten skriv hele OpenDialog_Files->Files->Strings[i].c_str() ind i anden linie eller alloker plads nok til path og strcpy den. c_str er potentiel farlig at bruge.
Avatar billede netro Nybegynder
23. januar 2006 - 13:27 #5
Tak for tippet - men hvad er det farlige her?

Jeg har prøvet at fjerne filteret helt, men det giver samme resultat.

Case 1 (musikfiler)
Filer valgt: 4495
Filer åbnet: 885

Case 2 (billedfiler)
Filer valgt: 4639
Filer åbnet: 3079

Case 3 (andre, blandede)
Filer valgt: 2133
Filer åbnet: 2133
Avatar billede netro Nybegynder
23. januar 2006 - 13:35 #6
Jeg ved ikke, om du har lyst til selv at prøve den kodestump og se, om du oplever det samme?
Avatar billede segmose Nybegynder
23. januar 2006 - 14:45 #7
Avatar billede netro Nybegynder
25. januar 2006 - 17:40 #8
Tak for linket, har du noget nyt?
Avatar billede netro Nybegynder
25. januar 2006 - 17:41 #9
Hvis jeg får svar på andet spørgsmål, er det første ikke så vigtigt.
Avatar billede bertelbrander Novice
26. januar 2006 - 00:38 #10
Jeg tror at problemet er at Builder "kun" afsætter ca. 64k bytes til at holde alle filnavne + stien. Så antallet af filer du kan vælge vil sansynligvis afhænge af længden på filnavnene.

Win32Api funktionen til at hente filnavne har så vidt jeg ved ikke denne begrænsning.
Den hedder GetOpenFileName
Avatar billede netro Nybegynder
29. januar 2006 - 19:05 #11
Jeg prøvede at teste lidt på længden af de samlede filnavne, men jeg kunne ikke lige se nogen logik i resultaterne. Jeg fik i stedet mappebrowseren til at fungere, så det er egentlig endnu bedre.

Tak for hjælpen og læg bare et svar.
Avatar billede netro Nybegynder
23. april 2006 - 19:09 #12
...
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