cmd et redirections rapides
Bonjour.
J'ai un problème concernant l'utilisation de cmd.exe dans un ShellExecute.
.
Code:
1 2 3 4 5 6 7 8 9
| AnsiString A = "/c dir > c:\\se4.txt ";
ShellExecute( Application->Handle,
"open",
"c:\\WINNT\\SYSTEM32\\cmd.exe",
A.c_str(),
"c:\\",
SW_SHOW);
Memo1->Lines->LoadFromFile("c:\\se4.txt");
DeleteFile("c:\\se4.txt"); |
La première exécution est correcte. Mais la seconde produit une erreur :
Citation:
"Impossible d'ouvrir le fichier c:\se4.txt".
Comme si la seconde exécution n'avait pas le temps de créer le second fichier de résultat. Si on attend un temps assez long et par exemple en préparant une autre commande dans la variable A, on finit par avoir le fichier de réponse du ShellExecute précédent.
J'ai donc tenté de détecter l'arrivée du fichier de résultat après le ShellExecute :
Code:
1 2 3
| // attendre que le fichier existe
do {
} while (!(FileExists("c:\\se4.txt"))); |
Mais, je me suis rendu compte que la suite plantait pareil parce que cmd crée d'abord un fichier de taille nulle qui existe et est détecté par FileExists() !...
J'ai donc complété par :
Code:
1 2 3 4
| // Attendre que le fichier soit "plein"
do {
handle = open("c:\\se4.txt", O_TEXT);
} while (filelength(handle) == 0); |
.
Le plantage se produit identiquement.
Qui aurait une idée ?
Y a t'il un problème avec le flag '/c' dans l'argument après cmd ?