[résolu] [boost] problèmes avec copy_file

problèmes avec copy_file [résolu] [boost] - C++ - Programmation

Marsh Posté le 20-11-2007 à 12:17:43    

Bonjour,
 
J'ai un soucis avec copy_file de Boost, je me prends à chaque fois des exceptions dans la gueule quand je l'utilise.
Voici mon code :
 

Code :
  1. #include <boost/filesystem.hpp>
  2. namespace fs = boost::filesystem;
  3. int main( int argc, char* argv[] )
  4. {
  5.     try{
  6.         fs::copy_file( "C:/foo1/bar.txt", "C:/foo2" );
  7.     }
  8.     catch( fs::filesystem_error& e )
  9.     {
  10.         std::cerr << e.what() << ':' << e.system_error() << std::endl;
  11.     }
  12.     return 0;
  13. }


 
J'ai donc à chaque fois une exception, alors que foo1, foo2 et bar.txt qui existent bien ...
 
 
Auriez-vous une idée svp ?
Merci.
 
Note : le code erreur retourné est le 3. Mais j'ai pas encore trouvé à quoi ça correspond.
 
 
 
 
 
 
 
 
Solution :

Code :
  1. fs::copy_file( "C:/foo1/bar.txt", "C:/foo2/bar.txt" );


Message édité par Riot le 20-11-2007 à 15:10:10

---------------
Be the one with the flames.
Reply

Marsh Posté le 20-11-2007 à 12:17:43   

Reply

Marsh Posté le 20-11-2007 à 14:07:30    

t'es sous windows ? si c'est le cas, alors c'est C:\foo1\bar.txt et C:\foo2 qu'il faut écrire :o

Reply

Marsh Posté le 20-11-2007 à 14:25:58    

Salut,
 
Pour les codes d'erreur, cf msdn:

Citation :

3 ERROR_PATH_NOT_FOUND


 
Le fichier source existe bien? Le répertoire destination existe bien aussi? (il n'est pas créé automatiquement)
En gros, regarde pourquoi l'exception est générée:

Citation :

Throws: basic_filesystem_error<Path> if  from_fp.empty() || to_fp.empty() ||!exists(from_fp) || !is_regular(from_fp) || exists(to_fp)


 
Pour le séparateur, tu peux rester avec '/' qui est transformé automatiquement par boost.

Reply

Marsh Posté le 20-11-2007 à 14:39:30    

IrmatDen a écrit :


 
Pour le séparateur, tu peux rester avec '/' qui est transformé automatiquement par boost.


ah bon [:petrus dei]
j'ai déjà eu des soucis avec des '/' à la place de '\' sous Win, moi ! mais c'était avec une ancienne version de boost, ça a ptet été corrigé depuis.
sinon, son souci peut pas venir aussi du fait qu'il n'échappe pas les '/' ?

Reply

Marsh Posté le 20-11-2007 à 14:46:49    

Boost fait ça automatiquement maintenant.

 

Pour être sûr, j'ai fait comme ça :

 
Code :
  1. fs::path p1 = fs::path("c:/" ) / fs::path("foo1" ) / fs::path("bar.txt" );
  2. fs::path p2 = fs::path("c:/" ) / fs::path("foo2" );
  3. try{
  4. fs::copy_file( p1, p2 );
  5. }
  6. catch( filesystem_error& e )
  7. {
  8. std::cerr << e.what() << ':' << e.system_error() << std::endl;
  9. }
 


Et oui, comme je l'ai dit, les répertoires foo1, foo2 et le fichier bar.txt existent bien.


Message édité par Riot le 20-11-2007 à 14:50:55

---------------
Be the one with the flames.
Reply

Marsh Posté le 20-11-2007 à 14:54:40    

Par contre là j'ai une erreur 5, ERROR_ACCESS_DENIED d'après la msdn [:petrus75]


---------------
Be the one with the flames.
Reply

Marsh Posté le 20-11-2007 à 15:00:07    

télécharge Filemon, et regarde les accés fichiers générés par ton soft. tu vas de suite voir le souci

Reply

Marsh Posté le 20-11-2007 à 15:08:04    

Ah oué merci beaucoup.
 
Grâce à ça j'ai découvert qu'il fallait préciser le nom du fichier de destination, et pas seulement son répertoire [:petrus75]


---------------
Be the one with the flames.
Reply

Marsh Posté le 20-11-2007 à 15:33:19    

[:god]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed