2011-09-25 13 views

Odpowiedz

10

Osiągają ten sam wynik, ale należą do różnych interfejsów API, więc zwracają wyniki i raportują błędy na różne sposoby.

Jeśli używasz już innych procedur z dowolnego interfejsu API, wybierz to. Jeśli nie, SetCurrentDirectory() jest bardziej "Windowsy", podczas gdy _chdir() jest bardziej podobny do POSIX API. Jeśli masz pomysł na przeniesienie kodu na, powiedzmy, platformę Linux, użyj _chdir(); jeśli wiesz, że będziesz uruchamiał kod tylko na platformach Windows, SetCurrentDirectory().

0

SetCurrentDirectory to makro, które zostanie przełączone na SetCurrentDirectoryA lub SetCurrentDirectoryW w zależności od ustawień kompilacji. Nie ma makro makr systemu dla _chdir i _wchdir.

Parametr MSDN page for SetCurrentDirectory określa, że ​​argument może dotyczyć bieżącego katalogu roboczego lub wartości bezwzględnej. Dokumentacja dla _chdir nie mówi w żaden sposób, choć wygląda na to, że ma on na Linuxie Can chdir() accept relative paths?.

7

_chdir używa wewnętrznie, więc w większości przypadków są one efektywnie wymienne. Jednak _chdir robi jeszcze jedną rzecz: aktualizuje bieżący katalog bieżącego dysku, przechowywany w zmiennej środowiskowej. Jest to potrzebne, jak stwierdza uwaga w _tchdir, ponieważ "inne funkcje (fullpath, spawn, itp.) Wymagają ich ustawienia".

Nie jestem pewien, jak bardzo jest to potrzebne w dzisiejszych czasach, ale chciałbym powiedzieć - jeśli używasz tych funkcji w stylu POSIX do operacji na plikach, manipulacji ścieżką, tworzenia procesów itp., Stosuj odpowiednio _chdir. Jeśli używasz bezpośrednio funkcji Win32 API, użyj SetCurrentDirectory.

+0

Czy jest to ten sam * fałszywy * na katalog bieżący dysku, z którego korzysta interpreter cmd.exe? –

+0

@DavidHeffernan, nie jestem pewien, czy rozumiem twoje pytanie (czy mógłbyś to zmienić?), Ale myślę, że odpowiedź brzmi "tak" - używa dziwnych zmiennych środowiskowych "= C", które zgodnie z [tym] (http: // /blogs.msdn.com/b/oldnewthing/archive/2010/05/06/10008132.aspx) są również używane przez cmd. – eran

+0

tak to mam na myśli, a Raymond wyjaśnia, co mam na myśli, udając –

Powiązane problemy