Copyfile mache pas avec chemins en variable

sylfau Messages postés 16 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 27 mars 2007 - 22 juin 2004 à 15:28
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 22 juin 2004 à 16:19
Bjr,

mon programme doit recopier un fichier 'date.txt', d'un répertoire vers un autre.

Ca fonctionne quand j'entre mes chemins en constante :

CopyFile ("c:test/data.txt" ,"c:/data2.txt",a);

mais pas quand j'utilise des chemins varables...

Voici ma partie de code...

//déclarations
int a;

char Chemin_DD[256]="c:test/";

char Rep_Srce[256];

strcpy(Rep_Srce,("%sdata.txt",Chemin_DD));

CopyFile (Rep_Srce,"c:/data2.txt",a);

//prouve que ma variable contient le bon chemin :-/
printf("%sdata.txt\n",Chemin_DD);

//ça fonctionne quand je fais ça:
//CopyFile ("c:test/data.txt" ,"c:/data2.txt",a);

merci

5 réponses

hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
22 juin 2004 à 15:38
ca me parait un peu bizarre comme nom de chemin ca c:test/data.txt ...
essaie de voir avec GetLastError ce que ca dit
if (!CopyFile(...))
{
LPVOID lpMsgBuf; 
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), 0, (LPTSTR) &lpMsgBuf, 0, NULL); 
MessageBox(NULL,(LPCTSTR)lpMsgBuf,"",MB_ICONSTOP); 
LocalFree( lpMsgBuf ); // Free the buffer. 
}

0
sylfau Messages postés 16 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 27 mars 2007
22 juin 2004 à 16:10
Merci...

Je suis un débutant en C, et j'ai bêtement fait un copier-coller du code de gestion d'erreur.

Donc j'obtiens l'erreur 'Accés refusé'.

La partion est en FATdonc ce n 'est pas un problème de droits.

Surtout je ne comprends pas pourquoi ça ne fonctionne pas quand je passe par une variable :(, alors que ça fonctionne sans problème quand je donne même chemin en clair.
0
hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
22 juin 2004 à 16:14
je te rassure, ca fonctionne avec des variables.
ce qui est sur c'est qu'il faut faire attention aux caractères spéciaux, notament les pour un chemin de ce type : c:\rep\fichier.ext, il faut avoir une variable de la sorte char nom[260] = "c:\\rep\\fichier.ext"

à vérifier aussi que le fichier est pas déjà ouvert ailleurs
0
cs_magma Messages postés 198 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 18 mars 2011 1
22 juin 2004 à 16:17
Il faut doubler les slash \\

Regarde la fonction Installation() dans la source:

http://www.cppfrance.com/code.aspx?ID=16843
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
22 juin 2004 à 16:19
tu veut faire quoi avec cette ligne ?
strcpy(Rep_Srce,("%sdata.txt",Chemin_DD));

si c'est pour rajouter le texte "data.txt" à la chaîne Chemin_DD, c'est sprintf qu'il faut utiliser :

sprintf(Rep_Srce, "%sdata.txt", Chemin_DD);

dans ton code, pour "prouver" que ta variable contient la bonne valeur, il aurait fallu mettre :
printf(Re_Srce);

la façon dont tu vérifie est la façon dont il aurait fallu fabriquer la chaîne source (en utilisant sprintf pour affecter le résultat dans une chaine au lieu de l'écran comme avec printf)

sinon, dans une chaîne C, si tu veux mettre un backslash (\), il faut le doubler :
char Chemin_DD[256]="c:test\";
0