Funckja system() - Czy może działać poza katalogiem bieżącym?

0

Witam!
Wiecie może w jaki sposób nadać swojej aplikacji możliwość wychodzenia i edytowania plików ze swojego katalogu bieżącego?
To znaczy np:.Nie działa komenda: system("cd .."). A bardzo potrzebuję takiego mechanizmu.
Na necie znalazłem jakieś polecenie dla konsoli cmd ale takiej funkcji nie ma na liście komend w konsoli windows 10.
Z góry dziękuję za odpowiedzi.

0

Od początku, co chcesz zrobić?

0

Jak wyżej, bo może chcesz wykonać jakieś polecenie podająć absolutną ścieżkę?

1
Bartek57810 napisał(a):

Witam!

Wiecie może w jaki sposób nadać swojej aplikacji możliwość wychodzenia i edytowania plików ze swojego katalogu bieżącego?
To znaczy np:.Nie działa komenda: system("cd .."). A bardzo potrzebuję takiego mechanizmu.
Na necie znalazłem jakieś polecenie dla konsoli cmd ale takiej funkcji nie ma na liście komend w konsoli windows 10.
Z góry dziękuję za odpowiedzi.

Widzę, ze trafiłeś na jakies patologiczne przykłady.
Zostaw system("cd ..") w spokoju, 1)

http://poincare.matf.bg.ac.rs/~ivana/courses/ps/sistemi_knjige/pomocno/apue/APUE/0201433079/ch04lev1sec22.html

  1. z wielu powodów, np to jest wywołanie shella na "jeden strzał", zaraz się kończy i nie ma z tego efektów
2

Prawie dokładnie moje pytanie sprzed 6 lat xd:
https://unix.stackexchange.com/questions/141313/chdirdirectory-doesnt-change-directory-after-exiting-to-shell

Żeby uściślić, chodzi o to, że system() wywołuje nowy proces. Każdy proces posiada coś takiego jak katalog bieżący. Proces powstały w wyniku system() odziedziczy po rodzicu ten katalog, potem wykona cd .. (czyli zmieni katalog bieżący). Następnie wyjdzie. Zmiana katalogu nie propaguje się do procesu-rodzica. Aby osiągnąć ten efekt na Windowsie, można użyć np. funkcji SetCurrentDirectory:

https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setcurrentdirectory

Przykład (zakładam, że działający, bo nie mam Windowsa na testy):

#include <cstdlib>
#include <winbase.h>

int main() {
    system("cd"); // wypisze katalog bieżący
    SetCurrentDirectory("..");
    system("cd"); // wypisze katalog bieżący
}
0

Dzięki! Już wiem co robić.

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