gpt4 book ai didi

c++ - 在 C++ 中使用适当的数据类型(路径、字符串等)和 boost::filesystem 来高效地迭代文件、更改文件名和执行文件操作

转载 作者:太空狗 更新时间:2023-10-29 21:07:51 26 4
gpt4 key购买 nike

以下代码循环遍历“sourcepath”中的文件并将它们复制到“destpath”。如果它们存在,它们将重命名为原始文件名的“拷贝”。

我真的需要这么多代码吗?我感觉我在字符串和路径之间来回转换太多了,但我不确定还能怎么做。

有没有更简单、更有效的方法来做到这一点,或者这已经很好了吗?

系统:Win32(XP),Boost 库:1.44 v2,开发环境:Visual Studio TS 2008

namespace bfs = boost::filesystem;

bfs::path pathSource("C:/dir/sourcepath");
bfs::path pathDest("C:/dir/destpath");

for (bfs::directory_iterator iterDir(pathSource);
iterDir!=bfs::directory_iterator(); iterDir++)
{
std::string strSourceFilename(pathSource.string() + "/"
+ iterDir->filename());
std::string strDestFilename(pathDest.string() + "/"
+ iterDir->filename());
bfs::path pathSourceFilename(strSourceFilename);
bfs::path pathDestFilename(strDestFilename);

if(!bfs::exists(pathDestFilename))
bfs::copy_file(pathSourceFilename, pathDestFilename);
else {
std::string strNewDestFilename(pathDest.string()
+ "/" + "Copy of " + iterDir->filename());
bfs::path pathNewDestFilename(strNewDestFilename);
bfs::copy_file(pathSourceFilename, pathNewDestFilename);
}
}

ETA:将“Copy of”移动到正确的位置(在文件名旁边而不是目录名称旁边)。

ETA2:使用建议的编辑进行重构:

namespace bfs = boost::filesystem;

bfs::path pathSource("C:/dir/sourcepath");
bfs::path pathDest("C:/dir/destpath");

for (bfs::directory_iterator iterDir(pathSource);
iterDir!=bfs::directory_iterator(); iterDir++)
{
bfs::path pathSourceFilename(pathSource / iterDir->filename());
bfs::path pathDestFilename(pathDest / iterDir->filename());

if(!bfs::exists(pathDestFilename))
bfs::copy_file(pathSourceFilename, pathDestFilename);
else {
std::string strNewDestFilename("Copy of " + iterDir->filename());
bfs::path pathNewDestFilename(pathDest / strNewDestFilename);
bfs::copy_file(pathSourceFilename, pathNewDestFilename);
}
}

最佳答案

path 对象重载了 / 运算符,它将带有分隔符的第二个操作数附加到路径。

你的

std::string strSourceFilename(pathSource.string() + "/" 
+ iterDir->filename());
std::string strDestFilename(pathDest.string() + "/"
+ iterDir->filename());
bfs::path pathSourceFilename(strSourceFilename);
bfs::path pathDestFilename(strDestFilename);

可以写成

bfs::path pathSourceFilename(pathSource / iterDir->filename());
bfs::path pathDestFilename(pathDest / iterDir->filename());

(与 pathNewDestFilename 相同)。

关于c++ - 在 C++ 中使用适当的数据类型(路径、字符串等)和 boost::filesystem 来高效地迭代文件、更改文件名和执行文件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4272949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com