Stronę tą wyświetlono już: 3683 razy
Klasa QDir udostępnia szereg metod pozwalających na łatwe operowanie na ścieżkach dostępu, sprawdzaniu ich poprawności i wyszukiwaniu plików i folderów spełniających określone warunki filtrowania. W celu skorzystania z tej klasy konieczne jest oczywiście załączenie pliku QDir.
Metody statyczne
Metoda tworząca skróconą ścieżkę dostępu
Qt umożliwia tworzenie specjalnych ścieżek przeszukiwania, dzięki czemu można w znaczący sposób skrócić zapis w kodzie takiej ścieżki. Za pomocą metody addSerchPath można taką ścieżkę i jej znacznik dodać. Oto przykład:
Powyższy kod wyświetli true pod warunkiem, że ścieżka C:/myFolders/icons istnieje na dysku twardym.
Upraszczanie zapisu ścieżki względnej
Metoda cleanPath upraszcza podaną na wejście ścieżkę względną pozbywając się wszystkich znaków .., ., które oznaczają foldery nadrzędne. Przykład działania:
Powyższy kod wyświetli:
release
Metoda zwracająca i ustawiająca bieżące ustawienie ścieżki aplikacji
Metoda current zwraca ustawienie ścieżki aplikacji. Oto przykład:
Wynikiem działania będzie wyświetlenia ścieżki bezwzględnej do pliku programu
Metoda currentPath zwraca ustawienie ścieżki aplikacji. Oto przykład:
Za pomocą metody setCurrent można zmienić ustawienie bieżącej ścieżki aplikacji.
Metoda zwracająca listę dostępnych napędów w systemie
Metoda drivers zwraca obiekt klasy QFileInfoList, który zawiera wszystkie nazwy zamontowanych w systemie napędów i partycji. Oto przykład:
Wynik działania powyższego kodu:
"A:/" "C:/" "D:/"
Metoda zmieniająca styl zapisu ścieżki pod Windowsem na styl Linuxa
Metoda fromNativeSeparators zamienia przykładowo ścieżkę: "C:\\Folders\\Another one folder\\Some file.txt" na "C:/Folders/Another one folder/Some file.txt".
Metoda zwracająca ścieżkę do folderu użytkownika
Metoda home zwraca ścieżkę dostępu do folderu użytkownika w postaci obiektu klasy QDir. Możliwe jest też użycie metody homePath, która zwraca to samo pod postacią obiektu klasy QString.
Metody sprawdzające, czy ścieżka jest absolutna lub relatywna
Metoda isAbsolutePath sprawdza, czy podana ścieżka jest ścieżką absolutną, z kolei metoda isRelativePath sprawdza, czy podana ścieżka jest relatywna.
Metoda sprawdzająca, czy nazwa pliku pasuje do wzorca
Oto przykład użycia metody match w celu sprawdzenia, czy podana ścieżka spełnia warunki dopasowania:
Wynik działania powyższego kodu:
true false
Metody zwracające ścieżkę do partycji systemowej
Metoda root zwraca ścieżkę do partycji systemowej w postaci obiektu klasy QDir. Z kolei metoda rootPath zwraca tą ścieżkę jako obiekt klasy QString.
Pobieranie i ustawianie prefiksu do ścieżek systemowych
W Qt można utworzyć listę folderów podpiętych pod prefiks, który umożliwia wyszukiwanie podanego pliku, czy folderu w wielu lokalizacjach. Oto przykład użycia metod searchPaths oraz setSearchPaths:
Wynik działania powyższego kodu:
("C:/images", "C:/textures", "C:/pictures")
Metody zwracające ścieżkę do folderu tymczasowego (temporary)
Metoda temp zwraca obiekt klasy QDir zawierający ścieżkę do folderu zawierającego pliki tymczasowe. Z kolei metoda tempPath zwraca ścieżkę do tego samego folderu w postaci obiektu klasy QString.
Zamiana znaków stylu zapisu ścieżki Windowsa do formatu Linuxa
Metoda toNativeSeparators zamienia ścieżkę zapisaną w formacie: "C:\Some folder\some file.txt" do C:/Some folder/some file.txt".
Konstruktory klasy QDir
Klasa QDir dysponuje dwoma wartymi uwagi konstruktorami:
Drugi konstruktor przyjmuje jako trzeci argument flagę sterującą sposobem sortowania plików i folderów przy ich wyszukiwaniu. Argument ten może przyjmować następujące wartości:
- QDir::Name(0x00) - sortowanie po nazwie;
- QDir::Time (0x01) - sortowanie po dacie modyfikacji pliku lub folderu;
- QDir::Size (0x02) - sortowanie po rozmiarze pliku;
- QDir::Type (0x80) - sortowanie po rozszerzeniu;
- QDir::Unsorted (0x03) - a zostaw nie posortowane;
- QDir::NoSort (-1) - nie sortuje;
- QDir::DirsFirst (0x04) - umieszcza najpierw posortowane (albo i nie) foldery a na końcu pliki;
- QDir::DirsLast (0x20) - umieszcza najpierw posortowane (albo i nie) pliki a na końcu foldery;
- QDir::Reversed (0x08) - odwraca kolejność sortowania;
- QDir::IgnoreCase (0x10) - ignoruje wielkość znaków podczas sortowania;
- QDir::LocaleAware (0x40) - sortowanie z wykorzystaniem aktualnych ustawień lokalnych (poprawnie obsługuje sortowanie nazw zawierających polskie znaki)
Czwarty argument tego konstruktora przyjmuje flagę sterującą sposobem filtrowania plików i folderów przy ich wyszukiwaniu. Argument ten może przyjmować następujące wartości:
- QDir::Dirs (0x001) - zwracana będzie lista folderów spełniających warunki filtrowania;
- QDir::AllDirs (0x400) - zwracana będzie lista wszystkich folderów bez uwzględniania filtrowania;
- QDir::Files (0x002) - lista plików;
- QDir::Drives (0x004) - lista napędów (nie działa pod Linuxem;
- QDir::NoSymLinks (0x008) - ignoruje dowiązania symboliczne (nie działa na systemach, które nie obsługują dowiązań symbolicznych);
- QDir::NoDotAndDotDot (0x1000) - nie dodaje folderów "." i ".." do listy;
- QDir::NoDot (0x2000) - nie dodaje folderu "." do listy;
- QDir::NoDotDot (0x4000) - nie dodaje folderu ".." do listy;
- QDir::AllEntries (Dirs | Files | Drives) - lista folderów, plików, napędów oraz symbolicznych dowiązań;
- QDir::Readable (0x010) - zwraca listę plików, które mają ustawiony dostęp do odczytu. Ta flaga musi być użyta razem z QDir::Dirs lub QDir::Files;
- QDir::Writable (0x020) - zwraca listę plików, które mają ustawiony dostęp do zapisu. Ta flaga musi być użyta razem z QDir::Dirs lub QDir::Files;
- QDir::Executable (0x040) - zwraca listę plików, które są plikami wykonywalnymi. Ta flaga musi być użyta razem z QDir::Dirs lub QDir::Files;
- QDir::Modified (0x080) - zwraca listę plików, które zostały zmodyfikowane (nie działa na Linuxie;
- QDir::Hidden (0x100) - dodaje do listy pliki ukryte;
- QDir::System (0x200) - dodaje do listy pliki systemowe;
- QDir::CaseSensitive (0x800) - ustawia filtrowanie z uwzględnieniem wielkości znaków
Zmiana ścieżki za pomocą metody cd i cdUp
QDir dir = QDir::current();
qDebug() << dir.cdUp();
qDebug() << dir;
qDebug() << dir.cd("C:/");
qDebug() << dir;
Pobieranie liczby plików i folderów znajdujących się w danej lokalizacji
QDir dir = QDir::current();
qDebug() << dir.count();
Pobieranie nazwy folderu bieżącej lokalizacji
QString path = "C:/some folder";
QDir dir(path);
qDebug() << dir.dirName();
Wyświetli:
"some folder"
Pozyskiwanie listy plików i folderów
Istnieją dwie metody, które umożliwiają pozyskiwanie listy plików i folderów znajdujących się w zapisanej w obiekcie klasy QDir ścieżce. Te metody to:
- entryInfoList - zwraca listę obiektów typu QFileInfo, przechowujących informacje o danym pliku lub folderze;
- entryList - zwraca listę obiektów typu QString, przechowujących informacje nazwę danego pliku lub folderu
Powyższy kod wyświetli wszystkie pliki i foldery posortowane i filtrowane według domyślnych ustawień. Ustawienia te można zmienić w następujący sposób:
Powyższy kod przefiltruje pliki tak, że na liście będą znajdowały się tylko pliki z rozszerzeniem .jpg i .gif, filtrowanie zostanie ograniczone tylko do plików, które będą sortowane po nazwie.
Można nieco uprościć wyszukiwanie, jeżeli potrzebna jest ci tylko nazwa plików lub folderów z rozszerzeniem:
Sprawdzanie, czy ścieżka lub plik istnieje
Tworzenie ścieżki do pliku
Sprawdzanie właściwości przechowywanej ścieżki
Zamiana ścieżki względnej na bezwzględną względem bieżącego ustawienia ścieżki programu
Pobieranie ustawień filtrów i nazwanych filtrów oraz ich zmiana
Standardowo ustawione filtry wyszukiwania można zmienić za pomocą dwóch metod:
- setFilter - ustawia filtry opcji wyszukiwanych plików lub folderów;
- setNameFilters - ustawia wzorce filtrowania nazw plików
Oto przykład wykorzystania tych metod:
Z kolei metody zwracające to:
- filter - zwraca ustawienia filtrów;
- nameFilters - zwraca listę ustawionych nazwanych filtrów
Pobieranie ustawionej ścieżki i jej ustawianie
Pobieranie i ustawianie flag sortowania
Operacje na plikach i folderach
- mkdir - tworzy podkatalog w bieżącej lokalizacji, jeżeli katalog istnieje zwraca false;
- mkpath - tworzy całą ścieżkę podkatalogów, funkcja zwraca true nawet jeżeli ścieżka już istniała;
- rmdir - usuwa katalog o podanej nazwie (katalog musi być pusty, aby operacja się powiodła);
- rmpath - usuwa całą ścieżkę katalogów;
- remove - usuwa podany plik;
- rename - zmienia nazwę lub przenosi plik z jednego miejsca na inne
Porównywanie dwóch obiektów QDir
Klasa QDir obsługuje operatory porównania: == i !=.