Czy są jakieś różnice, które powinienem wybrać jeden nad drugim?Jaka jest różnica między _chdir i SetCurrentDirectory w systemie Windows?
Odpowiedz
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().
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?.
_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
.
Czy jest to ten sam * fałszywy * na katalog bieżący dysku, z którego korzysta interpreter cmd.exe? –
@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
tak to mam na myśli, a Raymond wyjaśnia, co mam na myśli, udając –
- 1. jaka jest różnica między installshield i windowsinstaller
- 2. jaka jest różnica między ~/i ~ w systemie Linux?
- 3. Jaka jest różnica między $ @ i $ * w systemie UNIX?
- 4. Jaka jest różnica między bitmapą i Drawable w systemie Android?
- 5. Jaka jest różnica między hasFocus() i isFocused() w systemie Android?
- 6. Jaka jest różnica między? : i ||
- 7. Jaka jest różnica między $ i $$?
- 8. Jaka jest różnica między developer.paypal.com i x.com?
- 9. Jaka jest różnica między ATL i WTL?
- 10. Jaka jest różnica między rurami i gniazdkami?
- 11. Jaka jest różnica między = i: = w mysql?
- 12. Jaka jest różnica między! = I =! w Javie?
- 13. Jaka jest różnica między 'i "w PHP
- 14. Jaka jest różnica między! i !! w yaml?
- 15. jaka jest różnica między @ i @@ w module?
- 16. Jaka jest różnica między * i. * W Matlab?
- 17. Jaka jest różnica między | i || w MATLAB?
- 18. Jaka jest różnica między * i * | * w CSS?
- 19. Jaka jest różnica między GTK # i Windows Forms?
- 20. Jaka jest różnica między układem a kontenerem w systemie Android?
- 21. Jaka jest różnica między System.Windows.Controls.Control i System.Windows.Forms.Control?
- 22. Jaka jest różnica między asersem i static_assert?
- 23. Jaka jest różnica między PropertyChangeListener i VetoableChangeListener?
- 24. Jaka jest różnica między Ja i Ja?
- 25. Jaka jest różnica między FontMetrics.stringWidth() i FontMetrics.getStringBounds()?
- 26. Jaka jest różnica między "CompletionStage" i "CompletableFuture"?
- 27. Jaka jest różnica między CellClick i CellMouseClick?
- 28. Jaka jest różnica między ObjectResult i JsonResult
- 29. Jaka jest różnica między ssize_t i ptrdiff_t?
- 30. Jaka jest różnica między fn i fn *?
Nie znam odpowiedzi, ale +1 za pytanie. –
Możesz zamiast tego chcieć porównać 'SetCurrentDirectory' do' _tchdir'. – Mehrdad