C++ / WinAPI - Výpis názvů všech souborů ve složce
Napsal: 26 září 2011 16:06:18
Jednoduchý program pro výpis souborů ve složce. Používám funkci FindFirstFile() a FindNextFile(), kterými hledám výraz *.* (všechny soubory). Všeobecně se to používá pro vyhledávání souborů. Získaná data se ukládají do struktury WIN32_FIND_DATA, která poskytuje širokou škálu informací o nalezených souborech.
Zdrojový kód programu:
http://paste.wlezley.eu/index.php/view/82519966
Struktura WIN32_FIND_DATA:
dwFileAttributes
Atributy souborů:
ftCreationTime
Struktura FILETIME obsahující datum a čas kdy byl soubor nebo adresář vytvořen.
Pokud základní systém souborů nepodporuje čas vytvoření, tento člen je nulový.
ftLastAccessTime
Struktura FILETIME.
U souborů tato struktura určuje, kdy bylo ze souboru naposledy čteno, do něj zapisováno, nebo (u spustitelných souborů) kdy byl naposledy spoušten.
U adresářů struktura určuje, kdy byl adresář vytvořen. Pokud základní systém souborů nepodporuje čas posledního přístupu, tento člen je nulový.
V systému souborů FAT, se zanamenává jen datum; čas je vždy nastaven na půlnoc (00:00).
ftLastWriteTime
Struktura FILETIME.
U souborů tato struktura určuje, kdy bylo do souboru naposledy zapisováno, kdy byl zkrácen nebo přepsán; např. když jsou použity funkce WriteFile() nebo SetEndOfFile(). Datum a čas nejsou aktualizovány, pokud se změní atributy souborů nebo popisovače zabezpečení (security descriptors).
U adresářů struktura určuje, kdy byl adresář vytvořen. Pokud základní systém souborů nepodporuje čas posledního zápisu, tento člen je nulový.
nFileSizeHigh
High-order DWORD hodnota velikosti souboru v bytech.
Tato hodnota je nulová, pokud velikost souboru je větší než MAXDWORD.
Velikost souboru je rovna (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow.
nFileSizeLow
Low-order DWORD hodnota velikosti souboru v bytech.
dwReserved0
Pokud člen dwFileAttributes zahrnuje atribut FILE_ATTRIBUTE_REPARSE_POINT, pak tento člen stanovuje tag bodu změny zpracování.
V opačném případě tato hodnota není definovaná a neměla by se používat.
Pro více informací viz. Reparse Point Tags.
dwReserved1
Rezervováno pro budoucí použití ...
cFileName
Celý název souboru.
cAlternateFileName
Alternativní jméno souboru (ve formátu 8.3 jak známe z MS-DOS, FAT, ... ).
Struktura FILETIME:
dwLowDateTime
Low-order část času souboru.
dwHighDateTime
High-order část času souboru.
Nic složitýho na tom není.
Zdrojový kód programu:
http://paste.wlezley.eu/index.php/view/82519966
Struktura WIN32_FIND_DATA:
- Kód: Vybrat vše
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[MAX_PATH];
TCHAR cAlternateFileName[14];
} WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
dwFileAttributes
Atributy souborů:
- FILE_ATTRIBUTE_READONLY 1 (0x1) - Soubor je pouze pro čtení. Aplikace můžou ze souboru číst, ale nemohou do něj zapisovat ani ho smazat. Tento atribut není zastoupen u adresářů.
- FILE_ATTRIBUTE_HIDDEN 2 (0x2) - Skrytý soubor nebo složka. (Soubor nebo složka není v běžném výpisu adresáře vidět).
- FILE_ATTRIBUTE_SYSTEM 4 (0x4) - Systémový soubor nebo adresář (částečně nebo výhradně využit operačním systémem).
- FILE_ATTRIBUTE_DIRECTORY 16 (0x10) - Handler označující adresář (tzn. že nalezená položka není soubor).
- FILE_ATTRIBUTE_ARCHIVE 32 (0x20) - Soubor nebo adresář, určený k archivaci. Aplikace obvykle používají tento atribut k označení souborů pro zálohování nebo odstranění.
- FILE_ATTRIBUTE_DEVICE 64 (0x40) - Tato hodnota je vyhrazena pro použití systému.
- FILE_ATTRIBUTE_NORMAL 128 (0x80) - Soubor, který nemá jiné nastavení atributů. Tento atribut je platný pouze při samostatném použití.
- FILE_ATTRIBUTE_TEMPORARY 256 (0x100) - Dočasný soubor. Souborový systém zabraňuje zápisu dat na mass storage (úložiště, obvykle pedný disk) je-li k dispozici dostatek vyrovnávací paměti, protože aplikace obvykle odstraní dočasný soubor po uzavření handleru. V tomto případě může systém zcela zabránit zápisu dat na mass storage. V opačném případě budou po ukončení handle data zapsána.
- FILE_ATTRIBUTE_SPARSE_FILE 512 (0x200) - Rozptýlený soubor.
- FILE_ATTRIBUTE_REPARSE_POINT 1024 (0x400) - Soubor nebo adresář, který má přidružený bod změny zpracování, nebo soubor, který je symbolickým odkazem. (LNK)
- FILE_ATTRIBUTE_COMPRESSED 2048 (0x800) - Soubor nebo adresář, který je komprimovaný. U souborů jsou komprimována všechna data. U adresářů je komprese výchozí pro nově vytvořené soubory a podadresáře.
- FILE_ATTRIBUTE_OFFLINE 4096 (0x1000) - Data souboru nejsou k dispozici okamžitě. To znamená, že data souboru jsou fyzicky přesunuta do offline úložiště. Tento atribut je používán zejména Vzdáleným Úložištěm (Remote Storage), což je software pro hierarchickou správu úložiště. Aplikace by neměla svévolně měnit tento atribut.
- FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 8192 (0x2000) - Soubor nebo adresář, který nemá být indexován službou indexování obsahu.
- FILE_ATTRIBUTE_ENCRYPTED 16384 (0x4000) - Soubor nebo adresář, který je šifrován. U souborů jsou šifrovány všechny datové proudy v souboru. U adresářů je šifrování výchozí pro nově vytvořené soubory a podadresáře.
- FILE_ATTRIBUTE_VIRTUAL 65536 (0x10000) - Tato hodnota je vyhrazena pro použití systému.
ftCreationTime
Struktura FILETIME obsahující datum a čas kdy byl soubor nebo adresář vytvořen.
Pokud základní systém souborů nepodporuje čas vytvoření, tento člen je nulový.
ftLastAccessTime
Struktura FILETIME.
U souborů tato struktura určuje, kdy bylo ze souboru naposledy čteno, do něj zapisováno, nebo (u spustitelných souborů) kdy byl naposledy spoušten.
U adresářů struktura určuje, kdy byl adresář vytvořen. Pokud základní systém souborů nepodporuje čas posledního přístupu, tento člen je nulový.
V systému souborů FAT, se zanamenává jen datum; čas je vždy nastaven na půlnoc (00:00).
ftLastWriteTime
Struktura FILETIME.
U souborů tato struktura určuje, kdy bylo do souboru naposledy zapisováno, kdy byl zkrácen nebo přepsán; např. když jsou použity funkce WriteFile() nebo SetEndOfFile(). Datum a čas nejsou aktualizovány, pokud se změní atributy souborů nebo popisovače zabezpečení (security descriptors).
U adresářů struktura určuje, kdy byl adresář vytvořen. Pokud základní systém souborů nepodporuje čas posledního zápisu, tento člen je nulový.
nFileSizeHigh
High-order DWORD hodnota velikosti souboru v bytech.
Tato hodnota je nulová, pokud velikost souboru je větší než MAXDWORD.
Velikost souboru je rovna (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow.
nFileSizeLow
Low-order DWORD hodnota velikosti souboru v bytech.
dwReserved0
Pokud člen dwFileAttributes zahrnuje atribut FILE_ATTRIBUTE_REPARSE_POINT, pak tento člen stanovuje tag bodu změny zpracování.
V opačném případě tato hodnota není definovaná a neměla by se používat.
Pro více informací viz. Reparse Point Tags.
- IO_REPARSE_TAG_DFS (0x8000000A)
- IO_REPARSE_TAG_DFSR (0x80000012)
- IO_REPARSE_TAG_HSM (0xC0000004)
- IO_REPARSE_TAG_HSM2 (0x80000006)
- IO_REPARSE_TAG_MOUNT_POINT (0xA0000003)
- IO_REPARSE_TAG_SIS (0x80000007)
- IO_REPARSE_TAG_SYMLINK (0xA000000C)
dwReserved1
Rezervováno pro budoucí použití ...
cFileName
Celý název souboru.
cAlternateFileName
Alternativní jméno souboru (ve formátu 8.3 jak známe z MS-DOS, FAT, ... ).
Struktura FILETIME:
- Kód: Vybrat vše
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME;
dwLowDateTime
Low-order část času souboru.
dwHighDateTime
High-order část času souboru.
Nic složitýho na tom není.