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:
QFile file;
file.setFileName("C:/file"); // ustawienie ścieżki do pliku za pomocą metody setFileName
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:
QFile file("C:/file");
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:
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:
QFile file("file.txt");
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
QTextStream out(&file);
out << "Some text to write"; // zapis danych do pliku
file.close();
}
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:
QFile file("file.txt");
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
QTextStream in(&file);
while(!in.atEnd()){ // dopóki nie osiągnięto końca pliku
qDebug() << in.readLine(); // odczyt pojedynczej linii tekstu
}
file.close();
}
Można też nie bawić się i od razu wczytać całość pliku:
QFile file("file.txt");
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
QTextStream in(&file);
qDebug() << in.readAll();
file.close();
}