Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
C/C++
Vyhledávání souborů - zjištění obsahu složky
winapi_logo
8. ledna 2003, 00.00 | V tomto článku si ukážeme, jak získat seznam souborů a podsložek, obsažených
v zadané složce. Výsledkem bude program, který vyvolá již probíranou funkci pro
výběr složky, upravenou tak, že během procházení jednotlivými složkami
uživatelem bude do ListBoxu na hlavním dialogu zobrazován seznam všech
souborů v této složce (s odfiltrováním podsložek) s uvedením jejich velikosti a
data poslední změny.
V tomto článku si ukážeme, jak získat seznam souborů a podsložek, obsažených v zadané složce. Výsledkem bude program, který vyvolá již probíranou funkci pro výběr složky, upravenou tak, že během procházení jednotlivými složkami uživatelem bude do ListBoxu na hlavním dialogu zobrazován seznam všech souborů v této složce (s odfiltrováním podsložek) s uvedením jejich velikosti a data poslední změny, jak je vidět na následujícím obrázku:
Získání obsahu složky nám umožňují funkce FindFirstFile a FindNextFile. Princip použití je následující: nejprve zavoláme funkci FindFirstFile, které zadáme vzor, kterému musí vyhovovat nalezené objekty (soubory či složky). Funkce nám v případě úspěchu naplní strukturu WIN32_FIND_DATA a vrátí handle. Tyto hodnoty pak použijeme v opakovaném hledání dalších objektů pomocí funkce FindNextFile. Nakonec musíme zavřít použitý handle. Struktura WIN32_FIND_DATA obsahuje různé informace o nalezeném objektu. V našem případě použijeme jméno souboru (cFilename) a prvek dwFileAttributes, pomocí kterého zjistíme, zda objektem je složka, které chceme ze seznamu vyloučit. Celý postup je vidět v následujícím výpisu:
|
Ve funkci PridejSoubor je dále vidět, jak lze pomocí funkce StrFormatByteSize získat textové vyjádření zadané velikosti (v bytech), přičemž funkce sama zvolí použití jednotky (kB, MB..) podle aktuální velikosti. Dále je zde ukázán převod a výpis časového údaje v souboru (typ FILETIME) na místní čas.
Nyní si ukážeme, jak zařídit, aby uvedená funkce byla volaná vždy při změně složky v dialogu výběru složky. Ve funkci BrowseCallbackProc využijeme parametr lpData, který představuje prvek lParam struktury BROWSEINFO, kterou plníme před voláním funkce SHBrowseForFolder. Využijeme ho pro předání handle dialogu, potřebné při volání funkce PridejZeSlozky, kterou si tak můžeme zavolat přímo zevnitř této callback funkce, jak je vidět na jejím výpisu:
|
Pro úplnost uvedeme také její volání:
|
Zde si můžete stáhnout ukázkový projekt (Visual C++ .NET) včetně spustitelné release verze: find_file.zip (35 kB).
Obsah seriálu (více o seriálu):
- Učíme se Win API - motivační úvod
- Učíme se WinAPI - Začínáme
- Učíme se WinAPI - 3.
- Učíme se Win API - 4.
- Učíme se Win API - 5.
- Učíme se Win API - 6.
- Učíme se Win API - 7.
- Učíme se Win API - 8
- Učíme se Win API - 9.
- Učíme se Win API - 10.
- Učíme se Win API - 11.
- Učíme se Win API - 12.
- Učíme se Win API - 13.
- Učíme se Win API - 14.
- Učíme se Win API - 15.
- Učíme se Win API - 16.
- Učíme se Win API - 17.
- Učime se Win API - 18.
- Učime se Win API - 19.
- Učime se Win API - 20.
- Učime se Win API - 21.
- Učime se Win API - 22.
- Učime se Win API - 23.
- Učime se Win API - 24.
- Učíme se Win API - 25.
- Učíme se Win API - 26.
- Učíme se Win API - 27.
- Učíme se Win API - 28.
- Učíme se Win API - uživatelsky kreslený ListBox
- Učíme se Win API - uživatelsky kreslený ListBox II
- Dialog výběru složky a naplnění ListBoxu soubory
- Vyhledávání souborů - zjištění obsahu složky
- Pracujeme s ComboBoxem ve WinAPI
- Pracujeme s ComboBoxem II.
- Rozšířený prvek ComboBoxEx
- Ovládací prvek TrackBar
- Ovládací prvek Progress Bar
Diskuse k článku
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007