2013-05-30 11 views
6

Potrzebuję sposób, aby uzyskać ścieżkę skryptu biegania (katalogu zawierającego plik źródłowy), aleRakieta: Jak odzyskać ścieżkę uruchomionego pliku?

(current-directory) 

nigdy zaznacza tam (w tym przypadku zewnętrznego dysku), lecz w pewnym określonym miejscu .

Utworzono plik, aby wypróbować wszystkie ścieżki find-system, ale żaden z nich nie jest plikiem uruchomionym! Dokumenty Racket nie pomagają.

Celem jest lokalna aplikacja serwera WWW (serwer muzyczny), która zmodyfikuje podkatalogi w katalogu zawierającym plik źródłowy. Będę przenosić aplikację na pendrive, więc musi być w stanie zlokalizować własny katalog, ponieważ przenoszę go pomiędzy komputerami i systemami operacyjnymi z zainstalowaną rakietą.

Odpowiedz

10

Łatwy sposób: wziąć nazwę skryptu działa, uczynić go kompletną ścieżkę, a następnie podejmuje katalogu:

(path-only (path->complete-path (find-system-path 'run-file))) 

Ale nie jesteś zainteresowany bardziej prawdopodobne w pliku, który został użyty do wykonania rzeczy (serwer WWW), ale w rzeczywistym pliku źródłowym, w którym umieszczasz swój kod. Tj. potrzebujesz trochę zasobów blisko źródła. Starszy sposobem osiągnięcia tego celu jest:

(require mzlib/etc) 
(this-expression-source-directory) 

Lepszym sposobem osiągnięcia tego celu jest użycie `runtime-ścieżkę”, która jest sposobem na określenie tych zasobów:

(require racket/runtime-path) 
(define-runtime-path my-picture "pic.png") 

To jest lepsze sine rejestruje również ścieżkę jako coś, od czego zależy twój skrypt - jeśli więc miałbyś spakować swój kod jako instalator, na przykład, Racket wiedziałby, żeby spakować ten plik PNG.

I wreszcie, można go używać do punktu w całym katalogu:

(define-runtime-path HERE ".") 
... (build-path HERE "pic.png") ... 
+0

@SquareCrow: Re Twoja sugerowana edycja - nie jest potrzebna, definicja "TUTAJ", o której wspomniałem na końcu, dokładnie to robi, bez użycia 'ścieżki-tylko'. –

+0

'(tylko ścieżka (ścieżka-> pełna ścieżka (plik-ścieżki-find-run-run))) nie działa, gdy działa na DrRacket. Zamiast tego zwraca ścieżkę do DrRacket. –

1

Jeśli chcesz bezwzględną ścieżkę, to myślę, że powinno to zrobić:

(build-path (find-system-path 'orig-dir) 
      (find-system-path 'run-file)) 
+1

To nie działa niezawodnie. Z 'run-file',' find-system-path' zwraca ścieżkę do '' racket' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' –

Powiązane problemy