2010-11-17 3 views
2

J'ai écrit la routine suivante afin de copier tous les fichiers d'un répertoire dans un sous-répertoire puis de les supprimer, mais je reçois toujours un accès refusé sur le copy_fail semble me tromper. Les chemins sont corrigés, les fichiers existent et les autorisations ne sont pas en lecture seule dans le répertoire de destination que vous venez de créer.Boost: copy_file avec accès refusé mais il n'y a pas de problème d'autorisation

Une suggestion comment chasser la source du problème?

J'ai essayé de déboguer, mais je n'ai pas le code source boost :: filesystem.

Toute suggestion est appréciée.

void 
moveConfigurationFileToSubDirectory() 
{ 
// TODO: Catch errors. 

boost::filesystem::path full_path(boost::filesystem::current_path()); 

// Create directory subdir if not exist 
boost::filesystem::path subdirPath(kSubdirectory); 
    if (!boost::filesystem::exists(subdirPath)) 
{ 
    PLog::DEV.Development(devVerbose, "%s: creating directory %s", __FUNCTION__, subdirPath.string()); 
    boost::filesystem::create_directories(subdirPath); 
} else 
    PLog::DEV.Development(devVerbose, "%s: directory %s exist", __FUNCTION__, subdirPath.string()); 

// Iterate through the configuration files defined in the static array 
// copy all files with overwrite flag, if successfully delete file (looks like there is not remove) 
for (int i = 0; i < kNumberOfConfigurationFiles; i++) 
{ 
    boost::filesystem::path currentConfigurationFile(kConfigurationFiles[i]); 

    try 
    { 
    boost::filesystem::copy_file(currentConfigurationFile, subdirPath, boost::filesystem::copy_option::overwrite_if_exists); 
    boost::filesystem::remove(currentConfigurationFile); 
    } 
    catch (exception& e) 
    { 
    PLog::DEV.Development(devError, "%s: exception - %s", __FUNCTION__, e.what()); 
    } 
} 
} 

Répondre

0

Sur quels systèmes d'exploitation fonctionnent-ils? Si sous Linux/Unix alors vous avez considéré les autorisations sur le répertoire contenant vos fichiers source (vous supprimez currentConfigurationFile, cela signifie que le répertoire contenant ce fichier doit avoir une autorisation d'écriture)?

+0

Je suis sur windows. J'ai réécrit la même fonctionnalité en utilisant l'API Windows et cela fonctionne. L'argument de destination doit-il être un fichier ou un répertoire? Merci. – emitrax

5

Vous devez spécifier le nom de fichier que vous voulez pour subdirPath et pas seulement le chemin. Le fichier copy_file de boost n'est pas assez intelligent pour savoir qu'en spécifiant un nom de répertoire, vous voulez que le fichier porte le même nom que la source.

+2

Pourquoi n'est-ce pas marqué comme la réponse? M'a beaucoup aidé, merci;) –