webForumDet fria alternativet

Lista filer i en katalog

C/C++ur C/C++

5 svar · 257 visningar · startad av SDCd

Medlem sedan jan. 2001795 inlägg
Frågan#1

Att öppna/skriva till filer är inte så krångligt, men hur går jag tillväga om jag skulle tex vilja visa alla filer i en katalog/directory?
Någon som har några tips eller länkar till kodexempel/tutorials i ämnet?
Finns det nåt standardsätt? Om inte, hur ser det ut i Linux resp. Windows?

Medlem sedan juli 2002581 inlägg
#2

Linux : system("ls");
Win : system("dir");

Medlem sedan aug. 2001723 inlägg
#3

Om du vill spara namnen på alla filer och kataloger i nån lista kan du göra på ungefär detta sätt i windows:

#include <direct.h>

WIN32_FIND_DATA data;
char *katalog = "c:/blabla";
vector<std::string> kataloger;
vector<std::string> filer;

HANDLE h = FindFirstFile(katalog, &data);
if (h == INVALID_HANDLE_VALUE)
  // felmeddelande
else {
if ((data.dwFileAttributes | FILE_ATTRIBUTE_DIRECTORY) == data.dwFileAttributes)
  kataloger.push_back(data.cFileName);
else filer.push_back(data.cFileName);
while (FindNextFile(h, &data) == TRUE) {
  if ((data.dwFileAttributes | FILE_ATTRIBUTE_DIRECTORY) == data.dwFileAttributes)
    kataloger.push_back(data.cFileName);
  else
    filer.push_back(data.cFileName);
}
Medlem sedan jan. 2001795 inlägg
#4

Tack!

Medlem sedan maj 20021 466 inlägg
#5

Använder du do slipper du att upprepa kod.

if (h == INVALID_HANDLE_VALUE)
  // felmeddelande
else
{
  do
  {
    if ((data.dwFileAttributes | FILE_ATTRIBUTE_DIRECTORY) == data.dwFileAttributes)
      kataloger.push_back(data.cFileName);
    else
      filer.push_back(data.cFileName);
  } while (FindNextFile(h, &data) == TRUE);
}
Medlem sedan jan. 2001795 inlägg
#6

Kort och koncist = snyggt :)

134 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)