logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Tworzenie drzewa plików w Visual C++ z podziałem na nadrzędne i potomne

Roolo 14 Kwi 2005 21:11 1291 6
REKLAMA
  • #1 1405725
    Roolo
    Poziom 11  
    Posty: 10
    Witam,

    Jak najlepiej zrobic w visual c++ drzewo ktore bedzie zawierało wszystkie pliki zczytane z okreslonej lokalizacji?? (z podzialem plikow na nadrzedne i potomne)

    Pozdrawiam
  • REKLAMA
  • #2 1408042
    ZeeWolf
    Poziom 28  
    Posty: 989
    Pomógł: 115
    Ocena: 58
    Witam. Do wyswietlania dezewek sluzy klasa MFC CTreeView lub CTreeCtrl. Pozdrawiam.
  • REKLAMA
  • #3 1408961
    Roolo
    Poziom 11  
    Posty: 10
    No tak, ale jak te klasy wykorzystac aby zrobić hierarchie plików w postaci drzewa??Pozdrawiam
  • REKLAMA
  • #4 1413923
    ZeeWolf
    Poziom 28  
    Posty: 989
    Pomógł: 115
    Ocena: 58
    No coz - w takim razie latwo nie bedzie (chyba, ze masz pojecie). Jezeli chodzi ci tylko o wyswietlenie struktury katalogow, to jest taka funkcja Shella (nie pamietam, jak sie dokladnie nazywa) - dziala jak CommDlg FileOpen, z tym ze dla katalogow. Nie pamietam, czy CTreeCtrl nie miala stylu specjalnie do struktury katalogow - sprawdz (MSDN). Jezeli nie, to musisz sobie zbudowac drzewko uzywajac np.: FindFirst i FindNext oraz komunikatow TreeCtrl. Jezeli beda jeszcze problemy, postaram sie sobie przypomniec to i owo. Pozdrawiam.
  • REKLAMA
  • #5 1414128
    MirekCz
    Poziom 35  
    Posty: 2220
    Pomógł: 330
    Ocena: 62
    Zeewolf dobrze prawi - uzywasz findfirst/findnext do "sciagniecia" listy plikow i katalogow w danym miejscu (analogicznie wchodzisz w katalogi i sciagasz liste plikow i podkatalogow tam itd - trzeba napisac funkcje rekurencyjna)
    Ta liste musisz tylko wrzucic do jakiejs kontrolki. Obojetne czy gotowej typu treeview czy jakiejs specjalnej - wlasnej.
  • #6 1430329
    Roolo
    Poziom 11  
    Posty: 10
    Witam,
    zrobiłem juz czesciowo ten eksplorator, tzn dziala mi tylko na dwoch poziomach plików - katalogów.
    kod do niego wyglada nastepująco:
    void CProba1CDKatalogDlg::czytaj_pliki(CString path)
    {
    WIN32_FIND_DATA zczytany_plik,dane;
    int warunek=1,warunek1;
    CString nowy1;
    HTREEITEM galaz;
    HANDLE parametr = FindFirstFile(path+"\\*",&zczytany_plik);
    CString nowy = zczytany_plik.cFileName;
    galaz = m_cDrzewo.InsertItem(nowy);

    while(warunek)
    {
    if((zczytany_plik.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
    {
    HANDLE parametr1=FindFirstFile(path+"\\"+nowy+"\\*",&dane);
    do
    {
    warunek1=FindNextFile(parametr1,&dane);


    nowy1=dane.cFileName;
    m_cDrzewo.InsertItem(nowy1, galaz);

    }
    while(warunek1);
    }
    //czytaj_pliki(path + "\\" + zczytany_plik.cFileName);//, nowa_galaz);

    warunek = FindNextFile(parametr,&zczytany_plik);
    if(warunek)
    {
    nowy = zczytany_plik.cFileName;
    galaz = m_cDrzewo.InsertItem(nowy);
    }
    }

    }


    Jak zastosować tu funkcje rekurencyjną?? bo jak próbuje zrobić to mi sie zapętla program

    Pozdrawiam
  • #7 1430450
    MirekCz
    Poziom 35  
    Posty: 2220
    Pomógł: 330
    Ocena: 62
    zapetla ci sie bo findfirst/findnext jako jeden z obiektow zwracaja takze "." i ".." co oznacza cofniecie sie do nadrzednego katalogu.
    Dodaj sprawdzenie czy obiekt jest "." lub ".." i jezeli tak to go omin.

    Znam takich spryciarzy, ktorzy korzystajac z tych funkcji i piszac cos na podobienstwo deltree skasowali sobie caly dysk twardy ;-)

Podsumowanie tematu

✨ Dyskusja dotyczy implementacji drzewa plików w Visual C++ z podziałem na pliki nadrzędne i potomne. Do wyświetlania struktury drzewa sugerowano użycie klas MFC CTreeView lub CTreeCtrl. Aby zbudować hierarchię plików i katalogów, zalecane jest wykorzystanie funkcji WinAPI FindFirstFile i FindNextFile do rekurencyjnego odczytu zawartości katalogów. Wskazano konieczność pominięcia specjalnych wpisów "." i ".." podczas iteracji, aby uniknąć zapętlenia. Przykładowy kod pokazuje częściową implementację eksploratora plików działającego na dwóch poziomach katalogów, z wykorzystaniem funkcji FindFirstFile i InsertItem do dodawania elementów do kontrolki drzewa. Podkreślono, że do pełnej funkcjonalności potrzebna jest rekurencja oraz odpowiednie zarządzanie uchwytami i warunkami pętli.
Wygenerowane przez model językowy.
REKLAMA