Interakcja z plikami

W języku C++ do interakcji z plikami służy klasa fstream. Jeżeli chcemy mieć możliwość edycji lub też odczytu danych zawartych w pliku, tworzymy zmienną, która będzie obsługiwała ten plik.

Nazwa „zmienna” została użyta dla uproszczenia. Zmienna konkretnej klasy nazywana jest obiektem. Na potrzeby naszych działań będziemy korzystać z uproszczenia. O podstawach programowania obiektowego przeczytasz więcej w e‑materiale Wstęp do programowania obiektowegoPBmBrCqF6Wstęp do programowania obiektowego.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny fstream zamknij nawias ostrokątny. Linia 4. using namespace std średnik. Linia 6. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. fstream plik średnik. Linia 8. plik kropka open otwórz nawias okrągły cudzysłów ścieżka do pliku cudzysłów zamknij nawias okrągły średnik. Linia 10. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 11. return 0 średnik. Linia 12. zamknij nawias klamrowy.

Chcąc uzyskać dostęp do klasy fstream, importujemy bibliotekę fstream. Następnie definiujemy zmienną plikową i używamy funkcji open(), której wymaganym argumentem jest ścieżka do pliku.

Podana ścieżka może być relatywnaścieżka relatywnarelatywna (względna) lub absolutna (bezwzględna). Jeżeli plik tekstowy znajduje się w tym samym folderze, podajemy tylko nazwę pliku wraz z rozszerzeniem, np. plik.open("plik.txt");.

Jeśli natomiast plik tekstowy znajduje się w innym katalogu, podajemy ścieżkę absolutnąścieżka absolutnaścieżkę absolutną. Ścieżka zależna jest od systemu operacyjnego, np. w systemie Windows podajemy literę oznaczającą dysk i wszystkie foldery, przez które należy przejść, aby przetworzyć plik, np.: plik.open("C:\\Pliki\\Dane\\plik.txt");.

W dystrybucjach Linuksa pliki zapisywane są w katalogach domowych użytkowników umieszczonych w katalogu /home/nazwa_uzytkownika. Ścieżkę rozpoczyna znak ukośnika (ang. slash), który oznacza katalog główny, np.: plik.open("/home/nazwa_uzytkownika/Dokumenty/plik.txt");.

Drugi argument, który możemy przekazać funkcji open(), to flagaflagaflaga oznaczająca tryb otwarcia pliku. Oto przykładowe flagi:

  • ios::app – otwarcie pliku w trybie dopisywania, dane znajdujące się w pliku zostają zachowane, nowe dane dopisywane są na końcu pliku, odczytywanie danych nie jest możliwe; flaga wymaga połączenia z flagą ios::out;

  • ios::in – pozwala na odczytywanie danych z pliku;

  • ios::out – pozwala na zapisywanie danych do pliku;

  • ios::trunc – usunięcie danych z pliku podczas jego otwierania; flaga wymaga połączenia z flagą ios::out (nie można natomiast łączyć jej z flagą ios::app).

Zamiast nazwy klasy ios można używać nazwy klasy pochodnej fstream, np.: fstream::in, fstream::out.

Flagi możemy łączyć za pomocą symbolu |.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny fstream zamknij nawias ostrokątny. Linia 4. using namespace std średnik. Linia 6. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. fstream plik średnik. Linia 8. plik kropka open otwórz nawias okrągły cudzysłów plik kropka txt cudzysłów przecinek ios dwukropek dwukropek in kreska pionowa ios dwukropek dwukropek out zamknij nawias okrągły średnik. Linia 10. return 0 średnik. Linia 11. zamknij nawias klamrowy.

Zdefiniowana w ten sposób zmienna plik może być użyta do zapisu oraz do odczytu danych.

Kiedy mamy zmienną plikową, warto sprawdzić, czy jest opcja skorzystania z pliku. Można użyć do tego między innymi funkcji good(), która zwraca wartość true, jeżeli możemy używać pliku, lub wartość false, jeżeli nie ma opcji korzystania z pliku. Np. gdy nie mamy praw do jego otwarcia lub zapisu.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny fstream zamknij nawias ostrokątny. Linia 4. using namespace std średnik. Linia 6. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. fstream plik średnik. Linia 8. plik kropka open otwórz nawias okrągły cudzysłów plik kropka txt cudzysłów przecinek ios dwukropek dwukropek in kreska pionowa ios dwukropek dwukropek out zamknij nawias okrągły średnik. Linia 10. if otwórz nawias okrągły plik kropka good otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 11. prawy ukośnik prawy ukośnik wykonuj działania na pliku. Linia 12. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 13. prawy ukośnik prawy ukośnik nie można korzystać z pliku. Linia 14. zamknij nawias klamrowy. Linia 16. return 0 średnik. Linia 17. zamknij nawias klamrowy.
Ważne!

Jeżeli do utworzenia zmiennej plikowej używamy flag ios::in lub ios::in | ios::out, wartość true zwracana przez funkcję good() nie oznacza, że plik istnieje na dysku!

Po zakończeniu wszystkich działań na pliku należy użyć metody close(), która wymusza zapisanie wszystkich oczekujących w buforze danych do pliku, o ile istnieją, i zwalnia przydzielone zasoby. W podanych dalej przykładach pokazujemy jej stosowanie.

Zapisywanie danych do pliku

Szkielet programu, który pozwala na zapis do pliku, przedstawia się następująco:

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny fstream zamknij nawias ostrokątny. Linia 4. using namespace std średnik. Linia 6. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. fstream plik średnik. Linia 9. plik kropka open otwórz nawias okrągły cudzysłów plik kropka txt cudzysłów przecinek ios dwukropek dwukropek out zamknij nawias okrągły średnik. Linia 11. if otwórz nawias okrągły plik kropka good otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. prawy ukośnik prawy ukośnik wykonuj działania na pliku. Linia 13. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 14. prawy ukośnik prawy ukośnik nie można korzystać z pliku. Linia 15. zamknij nawias klamrowy. Linia 17. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 18. zamknij nawias klamrowy.
Dla zainteresowanych

Warto wspomnieć, że zamiast funkcji open() możemy stosować typową dla C++ konstrukcję wykorzystującą konstruktor klasy fstream: fstream zmienna("nazwa_pliku.txt", flagi). W przedstawionym kodzie napisalibyśmy:

Linia 1. fstream plik otwórz nawias okrągły cudzysłów plik kropka txt cudzysłów przecinek ios dwukropek dwukropek out zamknij nawias okrągły średnik.

Do zapisywania danych używamy jednego z dwóch omówionych wcześniej trybów otwarcia plików: ios::out lub ios::app. Tryb ios::out, jeżeli podany plik istnieje, usuwa jego zawartość. Flaga ios::app zachowuje poprzednie dane, a kolejne zapisuje na końcu.

Dane do pliku zapisujemy – podobnie jak podczas wypisywania ich na standardowy strumień wyjścia cout – używając operatora <<. Jeżeli chcemy usunąć wszystkie dane z pliku, a następnie zapisać w nim liczbę 21, wykonujemy to następująco:

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny fstream zamknij nawias ostrokątny. Linia 4. using namespace std średnik. Linia 6. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. fstream plik średnik. Linia 9. plik kropka open otwórz nawias okrągły cudzysłów plik kropka txt cudzysłów przecinek ios dwukropek dwukropek out zamknij nawias okrągły średnik. Linia 11. if otwórz nawias okrągły plik kropka good otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. prawy ukośnik prawy ukośnik wykonuj działania na pliku. Linia 13. plik otwórz nawias ostrokątny otwórz nawias ostrokątny 21 otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 14. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 15. prawy ukośnik prawy ukośnik nie można otworzyć pliku. Linia 16. zamknij nawias klamrowy. Linia 18. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 19. zamknij nawias klamrowy.

Jeśli do pliku zamierzamy dopisać wartość 22, używamy flagi ios::app.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny fstream zamknij nawias ostrokątny. Linia 4. using namespace std średnik. Linia 6. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. fstream plik średnik. Linia 9. plik kropka open otwórz nawias okrągły cudzysłów plik kropka txt cudzysłów przecinek ios dwukropek dwukropek app zamknij nawias okrągły średnik. Linia 11. if otwórz nawias okrągły plik kropka good otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. prawy ukośnik prawy ukośnik wykonuj działania na pliku. Linia 13. plik otwórz nawias ostrokątny otwórz nawias ostrokątny 22 otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 14. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 15. prawy ukośnik prawy ukośnik nie można otworzyć pliku. Linia 16. zamknij nawias klamrowy. Linia 18. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 19. zamknij nawias klamrowy.
Ważne!

Warto pamiętać, że plik nie musi wcześniej istnieć. Jeśli go nie ma, zostanie utworzony.

Wczytywanie danych z pliku

Do wczytywania danych z pliku używamy tylko jednej flagi i jest nią ios::in. Omówimy dwa sposoby wczytywania danych tekstowych, które jednak nie nadają się do czytania danych binarnych.

Pierwszy sposób jest podobny do wczytywania danych przy wykorzystaniu standardowego strumienia wejścia cin i operatora >>. Jednak zamiast cin wpisujemy w tym przypadku nazwę zmiennej plikowej.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny fstream zamknij nawias ostrokątny. Linia 4. using namespace std średnik. Linia 6. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. fstream plik średnik. Linia 9. plik kropka open otwórz nawias okrągły cudzysłów plik kropka txt cudzysłów przecinek ios dwukropek dwukropek in zamknij nawias okrągły średnik. Linia 11. if otwórz nawias okrągły plik kropka good otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. prawy ukośnik prawy ukośnik wykonuj działania na pliku. Linia 13. string daneZPliku średnik. Linia 14. plik zamknij nawias ostrokątny zamknij nawias ostrokątny daneZPliku średnik. Linia 15. cout otwórz nawias ostrokątny otwórz nawias ostrokątny daneZPliku średnik. Linia 16. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 17. prawy ukośnik prawy ukośnik nie można korzystać z pliku. Linia 18. zamknij nawias klamrowy. Linia 20. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 21. zamknij nawias klamrowy.
Dla zainteresowanych

Otwarcie pliku do odczytu, podobnie jak do zapisu, możliwe jest również z pominięciem funkcji open():

Linia 1. fstream plik otwórz nawias okrągły cudzysłów plik kropka txt cudzysłów przecinek ios dwukropek dwukropek in zamknij nawias okrągły średnik.

Do zmiennej daneZPliku zapisywany będzie tekst z pliku – aż do napotkania znaku spacji, tabulatora lub też końca linii. Oznacza to, że jeżeli w pliku znajduje się wiersz zawierający tekst „21 22”, to do zmiennej daneZPliku zapisany zostanie ciąg „21”, ponieważ znaki „21” i „22” są rozdzielone spacją.

Jeżeli chcemy odczytać z pliku cały wiersz, używamy funkcji getline(). Funkcja ta jako pierwszy argument przyjmuje zmienną plikową, natomiast drugim argumentem jest zmienna, do której zostanie zapisany wiersz z pliku. Popatrzmy na przykład:

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny fstream zamknij nawias ostrokątny. Linia 4. using namespace std średnik. Linia 6. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. fstream plik średnik. Linia 9. plik kropka open otwórz nawias okrągły cudzysłów plik kropka txt cudzysłów przecinek ios dwukropek dwukropek in zamknij nawias okrągły średnik. Linia 11. if otwórz nawias okrągły plik kropka good otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. prawy ukośnik prawy ukośnik wykonuj działania na pliku. Linia 13. string daneZPliku średnik. Linia 14. getline otwórz nawias okrągły plik przecinek daneZPliku zamknij nawias okrągły średnik. Linia 15. cout otwórz nawias ostrokątny otwórz nawias ostrokątny daneZPliku średnik. Linia 16. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 17. prawy ukośnik prawy ukośnik nie można korzystać z pliku. Linia 18. zamknij nawias klamrowy. Linia 20. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 21. zamknij nawias klamrowy.

O wiele częściej będziemy chcieli odczytać wszystkie wiersze zawarte w pliku. Jednym ze sposobów jest użycie w pętli metody eof():

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny fstream zamknij nawias ostrokątny. Linia 4. using namespace std średnik. Linia 6. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. fstream plik średnik. Linia 9. plik kropka open otwórz nawias okrągły cudzysłów dane2 kropka txt cudzysłów przecinek ios dwukropek dwukropek in zamknij nawias okrągły średnik. Linia 11. if otwórz nawias okrągły plik kropka good otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. string wiersz średnik. Linia 13. while otwórz nawias okrągły wykrzyknik plik kropka eof zamknij nawias okrągły otwórz nawias klamrowy. Linia 14. getline otwórz nawias okrągły plik przecinek wiersz zamknij nawias okrągły średnik. Linia 15. cout otwórz nawias ostrokątny otwórz nawias ostrokątny wiersz średnik. Linia 16. zamknij nawias klamrowy. Linia 17. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 18. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Nie można otworzyć pliku wykrzyknik cudzysłów średnik. Linia 19. zamknij nawias klamrowy. Linia 21. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 23. return 0 średnik. Linia 24. zamknij nawias klamrowy.

Podczas odczytu danych za pomocą pętli, metoda eof() w niektórych przypadkach może powodować błędy, ponieważ zwraca prawdę dopiero po tym, kiedy zostanie osiągnięty koniec pliku i nie wskazuje, że następna operacja odczytu będzie dotyczyła końca pliku.

Przykładem może być kod przedstawiony w filmie, którego zadaniem jest odczyt dwóch liczb z każdego wiersza pliku wejściowego i zapisanie ich w dwuwymiarowej tablicy liczb całkowitych:

Linia 1. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. int liczby otwórz nawias kwadratowy 10 zamknij nawias kwadratowy otwórz nawias kwadratowy 2 zamknij nawias kwadratowy średnik. Linia 3. int i znak równości 0 średnik. Linia 5. fstream plik średnik. Linia 6. plik kropka open otwórz nawias okrągły cudzysłów dane kropka txt cudzysłów przecinek ios dwukropek dwukropek in zamknij nawias okrągły średnik. Linia 8. if otwórz nawias okrągły plik kropka good otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. while otwórz nawias okrągły wykrzyknik plik kropka eof otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. plik zamknij nawias ostrokątny zamknij nawias ostrokątny liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias ostrokątny zamknij nawias ostrokątny liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy średnik. Linia 11. if otwórz nawias okrągły plik kropka eof otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły. Linia 12. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Błąd dwukropek koniec pliku wykrzyknik cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 13. if otwórz nawias okrągły plik kropka fail otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły. Linia 14. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Błąd dwukropek koniec pliku lub błędna wartość wykrzyknik cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 15. cout otwórz nawias ostrokątny otwórz nawias ostrokątny liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 16. i plus plus średnik. Linia 17. zamknij nawias klamrowy. Linia 18. zamknij nawias klamrowy. Linia 19. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 20. zamknij nawias klamrowy.

Jeżeli w pliku dane.txt będzie 9 lub mniej wierszy zawierających dwie liczby oddzielone znakiem spacji oraz pusty ostatni wiersz, próba odczytu dwóch liczb w instrukcji plik >> liczby[i][0] >> liczby[i][1]; zostanie wykonana mimo końca pliku i zakończy się błędem: do tablicy zostaną zapisane dwie liczby zero, których w pliku nie ma. Funkcje eof()fail() pozwalają wykryć tego typu sytuacje.

Zamiast konstrukcji while(!plik.eof()) lepiej więc stosować inne rozwiązania. W powyższym programie można użyć operatora bool(), który dodatkowo pozwala uprościć kod:

Linia 1. fstream plik średnik. Linia 2. plik kropka open otwórz nawias okrągły cudzysłów film podkreślnik dane kropka txt cudzysłów przecinek ios dwukropek dwukropek in zamknij nawias okrągły średnik. Linia 4. while otwórz nawias okrągły plik zamknij nawias ostrokątny zamknij nawias ostrokątny liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias ostrokątny zamknij nawias ostrokątny liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. cout otwórz nawias ostrokątny otwórz nawias ostrokątny liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 6. i plus plus średnik. Linia 7. zamknij nawias klamrowy. Linia 8. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik.

Metodę eof() można zastąpić funkcją getline(), która kończy wczytywanie, jeżeli napotyka koniec wiersza lub koniec pliku.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny fstream zamknij nawias ostrokątny. Linia 4. using namespace std średnik. Linia 6. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. fstream plik średnik. Linia 9. plik kropka open otwórz nawias okrągły cudzysłów plik kropka txt cudzysłów przecinek ios dwukropek dwukropek in zamknij nawias okrągły średnik. Linia 11. if otwórz nawias okrągły plik kropka good otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. string wiersz średnik. Linia 13. while otwórz nawias okrągły getline otwórz nawias okrągły plik przecinek wiersz zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 14. cout otwórz nawias ostrokątny otwórz nawias ostrokątny wiersz otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 15. zamknij nawias klamrowy. Linia 16. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 17. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Nie można korzystać z pliku wykrzyknik cudzysłów średnik. Linia 18. zamknij nawias klamrowy. Linia 20. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 22. return 0 średnik. Linia 23. zamknij nawias klamrowy.

Słownik

flaga
flaga

stała podana jako argument, której wartość modyfikuje działanie funkcji

ścieżka absolutna
ścieżka absolutna

inaczej: bezwzględna; ścieżka do pliku, gdzie punktem startowym jest początek systemu plików

ścieżka relatywna
ścieżka relatywna

inaczej: względna; ścieżka do pliku, gdzie punktem startowym jest folder, w którym znajduje się program