Der folgende Code durchläuft die Dateien in "sourcepath" und kopiert sie nach "destpath". Wenn sie vorhanden sind, werden sie in "Kopie von" des ursprünglichen Dateinamens umbenannt.
Brauche ich dafür wirklich so viel Code? Ich habe das Gefühl, dass ich viel zu viel hin und her zwischen Strings und Pfaden konvertieren, aber ich bin nicht sicher, wie es sonst zu tun.
Gibt es eine unkompliziertere und effizientere Möglichkeit, dies zu tun, oder ist dies das Beste, was es gibt?
System: Win32(XP), Boost-Bibliotheken: 1.44 v2, Entwicklungsumgebung: 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: Ich habe "Kopie von" an die richtige Stelle verschoben (neben den Dateinamen, nicht den Verzeichnisnamen).
ETA2: Mit den vorgeschlagenen Änderungen umgestaltet:
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);
}
}