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
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
Musisz użyć funkcji FindFirstFile
(documented here). Jest to standardowy (i preferowany) sposób w systemie Windows, jednak nie jest przenośny. Znaleziono nagłówek dirent.h
zawierający definicję funkcji standard POSIX.
uzyskać pełny kod Spójrz na ten przykład: Listing the Files in a Directory
Zastosowanie FindFirstFile i funkcji związanych. Przykład:
-1 dla używania przestarzałego 8-bitowego API. – Philipp
@Philipp: który jest przestarzałym * 8-bitowym * API ??? – Wizard79
@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
Co z biblioteką boost: system plików. Boost.org
+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 –
To nie jest "standardowy sposób" w systemie Windows ... – Wizard79
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
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.
W rzeczywistości funkcje w dirent.h są bardziej standardowe (POSIX). –
Ale plik nie jest zawarty w VC++ 2008 – qwe
@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