Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Kansion sisällön lukeminen

nakkikorva [23.01.2005 11:52:10]

#

Hei taas kaikille! Peliä tehdessäni ilmeni seuraavanlainen ongelma: kun luen FindFirstFilella ja FindNextFilella kansion sisältöä, ohjelma väittää että kansio on tyhjä. FindFirstFile ja ensimmäinen FindNextFile löytävät tiedoston, jonka nimi on kansion nimi, mutta sen jälkeiset FindNextFilet eivät löydä mitään. Missä lienee syy?

sqwiik [23.01.2005 13:00:48]

#

Millaisella lausekkeella haet tiedostoja?

nakkikorva [23.01.2005 13:30:10]

#

fhandle=FindFirstFile("C:\\game\\saves",&fdata);
FindNextFile(fhandle,&fdata);
c=0;
while (FindNextFile(fhandle,&fdata))
{
savename[c]=fdata.cFileName;
c++;
}

sqwiik [23.01.2005 13:45:17]

#

Tuo onglema tuli itsellänikin vastaan joskus (dos-versio findfirst ja findnext). Muistaakseni muuttujaan cFileName ei sisällytetä hakemistopolkua; eli jos hakemistossa c:\game\save olisi tiedosto save1.sav, niin cFileName:n sisältö olisi "save1.sav".
Toiseksi, muitaisin että hakuehtona pitäisi antaa myös tiedoston pääte ja kansioita läpikäydessä myös se viimeinen \-merkki eli

fhandle = FindFirstFile("C:\\GAMES\\SAVES\\.*", &fdata);
while(FindNextFile(handle, &fdata) != INVALID_HANDLE_VALUE)
  printf(fdata.cFileName);

En mene takuuseen koodin toiminnasta.

Metabolix [23.01.2005 13:50:15]

#

Tuossa siirrät jokaisen savename-taulukon alkion osoittamaan samaan tekstiin kuin fdata.cFileName. char-taulukoita ei oi siirtää tuolla tavalla. Sinun pitää varata tuolle savename-taulukolle muistia MAX_PATH-vakion verran jokaiselle riville ja kopioida tuo fdata.cFileName sinne (strcpy, sprintf tai for-silmukka). Miksi muuten jätät tuon FindFirstFile-funktion löytämän tiedoston listaamatta?

Muistathan käyttää kooditageja.

nakkikorva [23.01.2005 16:28:26]

#

Kiitos avusta ja anteeksi tagittomuudesta!

dungeon86 [25.01.2005 13:03:20]

#

Tuo on helppo myös tehdä DJGPP:llä:

#include <stdio.h>
#include <dir.h>

int main(void) {
 struct ffblk f;
 int done = findfirst("C:\\GAMES\\SAVES\\*.*", &f, FA_HIDDEN | FA_SYSTEM);
 while (!done) {
  printf("%s\n", f.ff_name);
  done = findnext(&f);
 }
 return 0;
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta