2010-07-04 14 views
13

Jak uzyskać wszystkie pliki w danym katalogu przy użyciu C++ w systemie Windows?Pliki w katalogu w C++

Uwaga:
znalazłem metody, które wykorzystują dirent.h ale muszę bardziej standardowy sposób ...

Thanks

+2

W rzeczywistości funkcje w dirent.h są bardziej standardowe (POSIX). –

+3

Ale plik nie jest zawarty w VC++ 2008 – qwe

+1

@Neil: POSIX nie jest częścią standardowej biblioteki i nie jest dobrze obsługiwany przez najczęściej używany kompilator C/C++ (MSVC) najczęściej używanego systemu operacyjnego (Windows). – Wizard79

Odpowiedz

29

Zastosowanie FindFirstFile i funkcji związanych. Przykład:

+0

-1 dla używania przestarzałego 8-bitowego API. – Philipp

+1

@Philipp: który jest przestarzałym * 8-bitowym * API ??? – Wizard79

+0

@Lorenzo: Ten, którego używał casablanca, zwany "ANSI" przez bibliotekę MSDN (termin "8-bitowy" jest technicznie poprawny, ale wydaje się, że jest używany wyłącznie przeze mnie). Jest on dołączony tylko w celu zapewnienia zgodności z systemem Windows 9x. Natywny interfejs API to UTF-16. Aby z niego skorzystać, zdefiniuj 'UNICODE' wszędzie i zamień 8-bitowe funkcje, takie jak' printf' albo przez ogólne makra ('_tprintf') lub funkcję UTF-16 (' _wprintf'), i użyj "szerokich" stałych łańcuchowych z '' Prefiks L' lub makro 'TEXT'. Zobacz swój własny post dla lepszego przykładu (nadal bez 'UNICODE', ponieważ powinno to być zdefiniowane przez przełącznik kompilatora). – Philipp

10

Co z biblioteką boost: system plików. Boost.org

+4

+1 za Boost. Może chcesz utworzyć łącze do dokumentacji systemu plików: http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm –

+0

To nie jest "standardowy sposób" w systemie Windows ... – Wizard79

+1

To zależy od definicji słowa "standard". Jeśli akceptujesz tylko standardy ISO, to nie ma w ogóle standardowego sposobu. 'FindFirstFile' jest akceptowanym interfejsem systemu OS do wyświetlania pozycji katalogu, a Boost.Filesystem jest po prostu opakowaniem tego interfejsu w systemie Windows. Oba są de facto standardami. – Philipp

4

Przyjęty standard C++ jest opisana w N1975 ISO/IEC TS 18822: 2015, najnowszy projekt jest N4100. Twój kompilator może jeszcze go nie mieć, w takim przypadku Boost.FileSystem zapewnia zasadniczo to samo.

Powiązane problemy