2008-10-26 5 views
1

Dans cmd.exe, je peux exécuter la commande "copier c: \ hello.txt c: \ hello2.txt" et cela a bien fonctionné. Mais dans mon programme C, j'ai couru ce morceau de code et obtenu l'erreur suivante:La copie systeme() échoue, alors que la copie cmd fonctionne

#include <iostream> 

using namespace std; 

int main() 
{ 
    system("copy c:\hello.txt c:\hello2.txt"); 
    system("pause"); 

    return 0; 
} 

Sortie: Le système ne peut pas trouver le fichier spécifié.

Quelqu'un sait-il ce qui se passe ici?

Répondre

17

À l'intérieur des chaînes C (et de nombreuses autres langues utilisant les mêmes règles d'échappement), \ doit être \\ car il s'agit du caractère d'échappement. Il vous permet d'entrer, en texte normal, les 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 couvrirai pas en détail.

Depuis \ est utilisé comme caractère d'échappement, nous avons besoin d'un moyen de mettre un réelle'\' 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 à des erreurs obscures avec des commandes comme:

FILE *fh = fopen ("c:\text.dat", "w"); 

où le \t est en fait le caractère tab et le fichier que vous êtes essayer d'ouvrir est:

                        c:TAB ex t.dat.

+1

+1 pour les clés sexy. – GManNickG

4

Sinon, toutes les fonctions de Windows supportent le style Unix barres obliques

system("copy c:/hello.txt c:/hello2.txt"); 

Certaines personnes préfèrent cela car il est plus facile de repérer un étrange « \ ».
Mais cela risque de dérouter les utilisateurs Windows si vous affichez ce chemin dans un message.

Questions connexes