Entra

View Full Version : Come eseguire il comando dir /s da delphi?


das
16-05-2005, 16:19
dovrei eseguire il seguente comando:
"dir 'directory' /s >ciao.txt"

ma sia createprocess che shellexecute non funzionano.
Cosa posso usare?

Grazie.

71104
16-05-2005, 16:34
prova system

das
17-05-2005, 06:19
Sapresti mica qual'è la pagina di msdn che ne spiega l'utilizzo?

Se cerco system nella barra di ricerca mi trovo di fronte un sacco di risultati che non c'entrano niente.

Ciao

cionci
17-05-2005, 07:51
E' semplice da usare...

system(const char *cmd);

das
17-05-2005, 11:44
Ma cosa devo aggiungere negli uses per farlo funzionare?

Sul sito della microsoft c'è scritto che in c++ devo includere process.h, ma questo non sembrerebbe avere una corrispondenza in delphi.

se scrivo :
a:integer;
.....
.....
....

a := system('dir');

mi dice che si aspettava il punto anzichè la parentesi.

71104
17-05-2005, 18:43
già, dimenticavo che usi Delphi; be', puoi sempre importarla dal common runtime di visual c++ (non ricordo esattamente il nome della dll, mi semnbrava qualcosa tipo "msvcrt.dll"); altrimenti apri il Visual Studio, fai un nuovo programmetto console di prova, nel main scrivi "system(<qualcosa>);", e facendo il debug vedi com'è implementata system :)

cionci
17-05-2005, 18:47
Sono sicuro che ci sia qualcosa di simile a system già implementato in Delphi...faccio mente locale...

cionci
17-05-2005, 18:56
Prova questo componente: http://maxxdelphisite.free.fr/doscmd.htm

71104
17-05-2005, 19:15
strano... non c'è nulla nella RTL?

cionci
17-05-2005, 19:19
Non ne ho idea...ma questo mi sembra un bel componente...visto che permette anche di prendere l'output del comando...

71104
17-05-2005, 21:49
das, se ti interessa ho fatto il debug della system: semplificando molto, quello che fa è una cosa del genere: WinExec("CMD /C <comando>", 0); dove <comando> è il comando da eseguire, nel nostro caso dir. (tutto questo lo puoi fare anche in Delphi ;))

cionci
18-05-2005, 00:13
Però se siamo in Win9x non può usare CMD ma deve usare command...

71104
18-05-2005, 12:34
Però se siamo in Win9x non può usare CMD ma deve usare command...
giàaaaaa, il caro vecchio command.com... :) tutto questo tempo su Windows NT e me n'ero dimenticato! :)
e questo però temo che sarà un problema perché WinExec è implementata come wrapper della CreateProcess e non so se funzionerebbe anche coi processi "strani" a 16 bit... boh :nono: cmq su 2000 nt e xp quella cosa funzionerà benissimo.

71104
18-05-2005, 12:35
e questo però temo che sarà un problema perché WinExec è implementata come wrapper della CreateProcess e non so se funzionerebbe anche coi processi "strani" a 16 bit...
hmmm, senza contare che command.com non riceve parametri... :mbe:
vabbè, su win9x bisogna fare per forza in altra maniera (ma sei sicuro che non esista nulla di analogo a cmd.exe su win9x?)

das
18-05-2005, 14:33
Grazie mille, avete risolto il mio problema:

WinExec("CMD /C <comando>", 0);

funziona egregiamente. (tanto lavoro su win2000)

Ciao

ChenDream
25-05-2005, 10:43
Già che parliamo di delphi, volevo chiedervi se anche a voi dà questo strano comportamento. Sto usando un computer vecchio e con poca memoria per cui non ho installato l'ambiente ma solo il compilatore free FPC (non so nemmeno che versione). E' normale che i riferimenti ai file dipendano da dove eseguo il programma? Mi spiego meglio. In C/C++/C# o Java, se nell'indirizzo del file non metto niente si dà per scontato che il file in questione si trovi nella stessa cartella dell'eseguibile. IN delphi dipende invece da dove esegui il programma. Quindi, se eseguo un'applicazione console dal desktop i file da leggere lì va a cercare sul desktop, anche se l'eseguibile si trova sotto c:\dep. E' normale? E' sensata come cosa?