Witam
Proszę o podpowiedź jak stworzyć plik ale w podkatalogu w ktorym znajduje sie program. Zeby nie wpisywać calej sciezki.
Jak to zrobić w c++? Najlepiej korzystając z fstream plik; itp.
Z góry dzięki.
./podkatalog
BTW
Po co tyle tematów?
Sory za te tematy ale mi sie net zawiesił i odświerzałem kilka razy stronke.
To zależy skąd odpalisz binarkę.
[beorn@nika tmp]$ cat test.c
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("%s\n", argv[0]);
return 0;
};
[beorn@nika tmp]$ pwd
/tmp
[beorn@nika tmp]$ ./test
./test
[beorn@nika tmp]$ cd /usr
[beorn@nika usr]$ /tmp/test
/tmp/test
[beorn@nika usr]$ ../tmp/test
../tmp/test
Wystarczy oskrobać argv[0] i masz ścieżkę dla pliku.
a czy można prosić o jakiś przykładzik?
Przykład wyciągnięcia ścieżki podałem Ci wyżej, na listingu test.c
Skrobaczka nazywa się dirname(), a jeśli z jakiegoś powodu nie możesz używać ścieżek względnych (np. zapisujesz ścieżkę do logów, a tam lepiej żeby lądowały bezwzględne), to przeciągnij całość przez realpath().
Być może w C++ są jakieś biblioteki, które to upraszczają. W tym temacie muszą się wypowiedzieć spece od tego języka. argv[0] + dirname() + realpath() powinny działać w C i w C++. Nie wiem jak sprawa wygląda pod Windows.
Jeszcze jedno. Jeśli piszesz pod Unices, staraj się nie uzależniać zapisywanych danych (i jakichkolwiek danych) od położenia pliku wykonywalnego. Ze względów bezpieczeństwa przyjęte jest w tych systemach, że binarki leżą w katalogach /bin (żeby były dostępne dla init przy starcie), /usr/bin (montowane przez NFS, wspólne dla wszystkich maszyn w danej architekturze) i /usr/local/bin (lokalne dla danej maszyny). Zwykły user nie ma uprawnień do zapisu w tych katalogach.
Oczywiście, można wrzucić wszystko do jednego katalogu (jak robiono to do niedawna w Windows), ale postrzegane jest to jako błąd, a w niektórych przypadkach może uniemożliwić uruchomienie programu (jeśli znajduje się on w katalogu podmontowanym z noexec).
Zatem: binarki trzymamy w /bin, /usr/bin lub /usr/local/bin (w zależności od przeznaczenia), biblioteki w /lib, /usr/lib lub /usr/local/lib (ditto), dane niezależne od architektury w /usr/share lub /usr/local/share, dane zależne od architektury w /usr/lib lub /usr/local/lib, dane wspólne generowane przez aplikacje wrzucamy do /var/*, a dane użytkownika generowane przez aplikacje wrzucamy do jego katalogu domowego (w odpowiednim podkatalogu).
Jeśli piszesz pod Windows, to rób co chcesz, ale dane userów lepiej zapisywać w ich dokumentach.