bool NoFile::Copy(const NoString& sOldFileName, const NoString& sNewFileName, bool bOverwrite) { if ((!bOverwrite) && (NoFile::Exists(sNewFileName))) { errno = EEXIST; return false; } NoFile OldFile(sOldFileName); NoFile NewFile(sNewFileName); if (!OldFile.Open()) { return false; } if (!NewFile.Open(O_WRONLY | O_CREAT | O_TRUNC)) { return false; } char szBuf[8192]; ssize_t len = 0; while ((len = OldFile.Read(szBuf, 8192))) { if (len < 0) { NO_DEBUG("NoFile::Copy() failed: " << strerror(errno)); OldFile.Close(); // That file is only a partial copy, get rid of it NewFile.Close(); NewFile.Delete(); return false; } NewFile.Write(szBuf, len); } OldFile.Close(); NewFile.Close(); struct stat st; GetInfo(sOldFileName, st); Chmod(sNewFileName, st.st_mode); return true; }
bool CFile::Copy(const CString& sOldFileName, const CString& sNewFileName, bool bOverwrite) { if ((!bOverwrite) && (CFile::Exists(sNewFileName))) { return false; } CFile OldFile(sOldFileName); CFile NewFile(sNewFileName); if (!OldFile.Open()) { return false; } if (!NewFile.Open(O_WRONLY | O_CREAT | O_TRUNC)) { return false; } char szBuf[8192]; int len = 0; while ((len = OldFile.Read(szBuf, 8192))) { if (len < 0) { DEBUG("CFile::Copy() failed: " << strerror(errno)); OldFile.Close(); // That file is only a partial copy, get rid of it NewFile.Close(); NewFile.Delete(); return false; } NewFile.Write(szBuf, len); } OldFile.Close(); NewFile.Close(); return true; }