system () copy échoue, alors que cmd copy fonctionne
Question
Dans cmd.exe, je peux exécuter la commande & copy; copier c: \ hello.txt c: \ hello2.txt " et cela a bien fonctionné. Mais dans mon programme C, j'ai exécuté ce morceau de code et j'ai obtenu l'erreur suivante:
#include <iostream>
using namespace std;
int main()
{
system("copy c:\hello.txt c:\hello2.txt");
system("pause");
return 0;
}
Sortie: Le système ne trouve pas le fichier spécifié.
Quelqu'un sait ce qui se passe ici?
La solution
Dans les chaînes C (et quelques autres langues qui utilisent les mêmes règles d'échappement), \
doit être \\
puisqu'il s'agit du caractère d'échappement. Il vous permet de saisir, en texte normal, des caractères non imprimables tels que:
- le caractère de tabulation
\ t
. - le caractère de retour chariot
\ r
. - le caractère de nouvelle ligne
\ n
. - d’autres que je ne traiterai pas en détail.
Puisque \
est utilisé comme caractère d'échappement, nous avons besoin d'un moyen de mettre un effectif '\'
dans une chaîne. Ceci est fait avec la séquence \\
.
Votre ligne doit donc être:
system("copy c:\\hello.txt c:\\hello2.txt");
Cela peut parfois conduire à masquer des erreurs avec des commandes telles que:
FILE *fh = fopen ("c:\text.dat", "w");
où \ t
est en fait le caractère onglet
et le fichier que vous essayez d'ouvrir est:
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; e x t . d a t .
Autres conseils
Toutes les fonctions Windows prennent également en charge les barres obliques de style Unix
.system("copy c:/hello.txt c:/hello2.txt");
Certaines personnes préfèrent cela, car il est plus facile de repérer un '\' étrange.
Toutefois, les utilisateurs de Windows risquent d’être déroutés si vous affichez ce chemin dans un message.