Qt - klasa QFile i operacje we/wy na pliku

Stronę tą wyświetlono już: 29 razy

Klasa QFile umożliwia zapis i odczyt danych do pliku ale również wykonywanie operacji zmiany nazwy, usuwania czy kopiowania pliku z jednej lokalizacji do drugiej. Aby możliwe było korzystanie z tej klasy konieczne jest załączenie pliku QFile.

Funkcje statyczne

Warte uwagi są statyczne funkcje klasy QFile, oto niektóre z nich:

  • copy - kopiuje plik z jednego miejsca do drugiego;
  • decodeName - zamiana kodowania nazwy pliku z UTF-8 do kodu ASCII;
  • encodeName - zamienia nazwę pliku zapisaną w ASCII na nazwę zapisaną w kodowaniu UTF-8;
  • exists - sprawdza, czy plik istnieje;
  • permissions - zwraca ustawione uprawnienia do pliku;
  • remove - usuwa podany plik;
  • rename - zmienia nazwę pliku;
  • resize - zmienia rozmiar pliku;
  • setPermissions - ustawia uprawnienia przypisane do pliku

Tworzenie obiektu klasy QFile

Można utworzyć obiekt klasy za pomocą konstruktora bezparametrowego lub z konstruktorem od razu ustawiającym ścieżkę do pliku:

Listing 1
  1. QFile file;
  2. file.setFileName("C:/file"); // ustawienie ścieżki do pliku za pomocą metody setFileName
  3. QFile file2("C:/file2"); // ustawienie ścieżki do pliku za pomocą konstruktora

Sprawdzanie czy plik istnieje

Po utworzeniu obiektu z przypisaną mu ścieżką można sprawdzić za pomocą metody exists, czy plik istnieje:

Listing 2
  1. QFile file("C:/file");
  2. qDebug() << file.exists(); // zwróci false, gdy plik nie istnieje

Kopiowanie pliku do wskazanej lokalizacji

Obiekty klasy QFile mają również metodę copy umożliwiającą łatwe kopiowanie pliku z jednego miejsca na drugie:

Listing 3
  1. QFile file("C:/file");
  2. file.copy("C:/Folder/file");

Zmiana nazwy pliku

Metoda rename umożliwia zmianę nazwy pliku:

Listing 4
  1. QFile file("C:/file");
  2. file.rename("file2"); // zmienia nazwę pliku</code>
  3. <p>Ważne aby pamiętać, że metoda ta nie zmieni nazwy pliku gdy plik o podanej nazwie istnieje. Funkcja zwraca <b>true</b>, gdy operacja się powiedzie.</p>
  4. <h2>Usuwanie pliku</h>
  5. <p>Metoda <strong class="Qt Cpp metoda_klasy">remove</strong> usuwa plik:</p>
  6. <code>QFile file("C:/file");
  7. file.remove(); // usuwa plik C:/file</code>
  8. <h2>Zapis danych do pliku</h2>
  9. <p>W celu zapisania danych do pliku należy utworzyć obiekt klasy <strong class="Qt Cpp val_type">QStringText</strong> będącym strumieniem danych, dzięki któremu możliwe będzie łatwe zapisywanie danych do pliku:</p>
  10. <code>QFile file("file.txt");
  11. if(file.open(QIODevice::WriteOnly | QIODevice::Text)){ // metoda open w otwiera plik w trybie tylko do odczytu z zamianą znaków \r\n ma \n
  12. QTextStream out(&file);
  13. out << "Some text to write"; // zapis danych do pliku
  14. file.close();
  15. }</code>
  16. <h2>Odczyt danych z pliku</h2>
  17. <p>W celu zapisania danych do pliku należy utworzyć obiekt klasy <strong class="Qt Cpp val_type">QStringText</strong> będącym strumieniem danych, dzięki któremu możliwe będzie łatwe zapisywanie danych do pliku:</p>
  18. <code>QFile file("file.txt");
  19. if(file.open(QIODevice::ReadOnly | QIODevice::Text)){ // metoda open w otwiera plik w trybie tylko do odczytu z zamianą znaków \r\n ma \n
  20. QTextStream in(&file);
  21. while(!in.atEnd()){ // dopóki nie osiągnięto końca pliku
  22. qDebug() << in.readLine(); // odczyt pojedynczej linii tekstu
  23. }
  24. file.close();
  25. }</code>
  26. <p>Można też nie bawić się i od razu wczytać całość pliku:</p>
  27. <code>QFile file("file.txt");
  28. if(file.open(QIODevice::ReadOnly | QIODevice::Text)){ // metoda open w otwiera plik w trybie tylko do odczytu z zamianą znaków \r\n ma \n
  29. QTextStream in(&file);
  30. qDebug() << in.readAll();
  31. file.close();
  32. }</code>
  33. [pages]
  34. href="http://doc.qt.io/qt-5/qfile.html"
  35. link="doc.qt.io/qt-5/qfile.html"
  36. description=" - opis klasy <strong class="Qt Cpp val_type">QFile</strong> na stronie dokumentacji biblioteki Qt"
  37. [/pages]
  38. [relatedpages]
  39. page="id=894"
Listing 5
  1. QFile file("C:/file");
  2. file.rename("file2"); // zmienia nazwę pliku

Ważne aby pamiętać, że metoda ta nie zmieni nazwy pliku gdy plik o podanej nazwie istnieje. Funkcja zwraca true, gdy operacja się powiedzie.

Usuwanie pliku

Metoda remove usuwa plik:

Listing 6
  1. QFile file("C:/file");
  2. file.remove(); // usuwa plik C:/file

Zapis danych do pliku

W celu zapisania danych do pliku należy utworzyć obiekt klasy QStringText będącym strumieniem danych, dzięki któremu możliwe będzie łatwe zapisywanie danych do pliku:

Listing 7
  1. QFile file("file.txt");
  2. if(file.open(QIODevice::WriteOnly | QIODevice::Text)){ // metoda open w otwiera plik w trybie tylko do odczytu z zamianą znaków \r\n ma \n
  3. QTextStream out(&file);
  4. out << "Some text to write"; // zapis danych do pliku
  5. file.close();
  6. }

Odczyt danych z pliku

W celu zapisania danych do pliku należy utworzyć obiekt klasy QStringText będącym strumieniem danych, dzięki któremu możliwe będzie łatwe zapisywanie danych do pliku:

Listing 8
  1. QFile file("file.txt");
  2. if(file.open(QIODevice::ReadOnly | QIODevice::Text)){ // metoda open w otwiera plik w trybie tylko do odczytu z zamianą znaków \r\n ma \n
  3. QTextStream in(&file);
  4. while(!in.atEnd()){ // dopóki nie osiągnięto końca pliku
  5. qDebug() << in.readLine(); // odczyt pojedynczej linii tekstu
  6. }
  7. file.close();
  8. }

Można też nie bawić się i od razu wczytać całość pliku:

Listing 9
  1. QFile file("file.txt");
  2. if(file.open(QIODevice::ReadOnly | QIODevice::Text)){ // metoda open w otwiera plik w trybie tylko do odczytu z zamianą znaków \r\n ma \n
  3. QTextStream in(&file);
  4. qDebug() << in.readAll();
  5. file.close();
  6. }
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-5/qfile.html - opis klasy QFile na stronie dokumentacji biblioteki Qt

Komentarze