tworzenie pliku w podkatalogu

0

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.

0

./podkatalog

BTW
Po co tyle tematów?

0

Sory za te tematy ale mi sie net zawiesił i odświerzałem kilka razy stronke.

0

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.

0

a czy można prosić o jakiś przykładzik?

0

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.

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1