2011-09-25 24 views

risposta

10

Raggiungono lo stesso risultato ma appartengono a API diverse, pertanto restituiscono i risultati e segnalano gli errori in diversi modi.

Se stai già utilizzando altre routine da entrambe le API, scegli quella. In caso contrario, SetCurrentDirectory() è più "Windowsy", mentre _chdir() è più simile all'API POSIX. Se hai una mente per portare il codice, diciamo, su una piattaforma Linux, usa _chdir(); se sai che eseguirai il codice solo su piattaforme Windows, SetCurrentDirectory().

0

SetCurrentDirectory è una macro che verrà risolta in SetCurrentDirectoryA o SetCurrentDirectoryW in base alle impostazioni di generazione. Non esiste una macro di sistema fornita per _chdir e _wchdir.

Il MSDN page for SetCurrentDirectory afferma che l'argomento può essere relativo alla directory di lavoro corrente o assoluto. La documentazione di _chdir non dice in alcun modo, anche se sembra che lo faccia sia Can chdir() accept relative paths? su Linux.

7

_chdir utilizza attualmente SetCurrentDirectory internamente, quindi nella maggior parte dei casi sono effettivamente intercambiabili. Tuttavia, _chdir fa ancora una cosa: aggiorna la directory corrente dell'unità corrente, memorizzata in una variabile di ambiente. Ciò è necessario, come afferma l'osservazione in _tchdir, perché "altre funzioni (percorso completo, spawn, ecc.) Richiedono che siano impostate".

io non sono sicuro di quanto questo è necessario in questi giorni, ma direi che - se si sta utilizzando le funzioni POSIX-style per le operazioni sui file, manipolazione percorso, creazione del processo, ecc, utilizzare _chdir conseguenza. Se stai utilizzando direttamente le funzioni API di Win32, utilizza SetCurrentDirectory.

+0

È lo stesso * falso * per directory corrente dell'unità che utilizza l'interprete cmd.exe? –

+0

@DavidHeffernan, non sono sicuro di aver capito la tua domanda (potresti riformularla?), Ma penso che la risposta sia sì - utilizza le strane variabili di ambiente "= C", che secondo [questo] (http://blogs.msdn.com/b/oldnewthing/archive/2010/05/06/10008132.aspx) vengono utilizzati anche da cmd. – eran

+0

sì, è quello che intendo e Raymond spiega cosa intendo fingendo –

Problemi correlati