// Rename srcFile destFile bool mv(const fileName& srcFile, const fileName& destFile) { if (MSwindows::debug) { Info<< "Move : " << srcFile << " to " << destFile << endl; } const fileName destName = ((destFile.type() == fileName::DIRECTORY) && (srcFile.type() != fileName::DIRECTORY)) ? destFile/srcFile.name() : destFile; const bool success = (0 == std::rename(srcFile.c_str(), destName.c_str())); return success; }
// Rename srcFile dstFile bool Foam::mv(const fileName& src, const fileName& dst) { if (POSIX::debug) { Info<< "Move : " << src << " to " << dst << endl; } if ( dst.type() == fileName::DIRECTORY && src.type() != fileName::DIRECTORY ) { const fileName dstName(dst/src.name()); return rename(src.c_str(), dstName.c_str()) == 0; } else { return rename(src.c_str(), dst.c_str()) == 0; } }
// Copy, recursively if necessary, the source to the destination bool Foam::cp(const fileName& src, const fileName& dest) { // Make sure source exists. if (!exists(src)) { return false; } fileName destFile(dest); // Check type of source file. if (src.type() == fileName::FILE) { // If dest is a directory, create the destination file name. if (destFile.type() == fileName::DIRECTORY) { destFile = destFile/src.name(); } // Make sure the destination directory exists. if (!isDir(destFile.path()) && !mkDir(destFile.path())) { return false; } // Open and check streams. std::ifstream srcStream(src.c_str()); if (!srcStream) { return false; } std::ofstream destStream(destFile.c_str()); if (!destStream) { return false; } // Copy character data. char ch; while (srcStream.get(ch)) { destStream.put(ch); } // Final check. if (!srcStream.eof() || !destStream) { return false; } } else if (src.type() == fileName::DIRECTORY) { // If dest is a directory, create the destination file name. if (destFile.type() == fileName::DIRECTORY) { destFile = destFile/src.component(src.components().size() -1); } // Make sure the destination directory exists. if (!isDir(destFile) && !mkDir(destFile)) { return false; } // Copy files fileNameList contents = readDir(src, fileName::FILE, false); forAll(contents, i) { if (POSIX::debug) { Info<< "Copying : " << src/contents[i] << " to " << destFile/contents[i] << endl; } // File to file. cp(src/contents[i], destFile/contents[i]); } // Copy sub directories. fileNameList subdirs = readDir(src, fileName::DIRECTORY); forAll(subdirs, i) { if (POSIX::debug) { Info<< "Copying : " << src/subdirs[i] << " to " << destFile << endl; } // Dir to Dir. cp(src/subdirs[i], destFile); } } return true; }