提升:copy_file失败并拒绝访问,但没有权限问题

时间:2010-11-17 10:24:36

标签: c++ boost-filesystem

我编写了以下例程,以便将目录中的所有文件复制到子目录中 然后删除它们,但我继续在copy_fail上获得访问被拒绝,这看起来很容易让我误解。路径是更正的,文件存在且权限在刚刚创建的目标目录中不是只读的。

有关如何寻找问题根源的任何建议吗?

我尝试调试,但我没有boost :: filesystem源代码。

任何建议都表示赞赏。

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());
  }
 }
}

2 个答案:

答案 0 :(得分:7)

您必须为subdirPath指定所需的文件名,而不仅仅是路径。 boost的copy_file不够智能,知道通过指定目录名称,您希望文件与源名称相同。

答案 1 :(得分:0)

运行此操作系统的操作系统是什么?如果在Linux / Unix上你已经考虑了保存源文件的目录的权限(你正在删除currentConfigurationFile,这意味着持有该文件的目录必须具有写权限)?