拷贝文件夹中的文件
拷贝文件
移除文件夹
win拷贝文件到文件夹
拷贝文件夹中的文件
#ifndef Q_OS_LINUX
#include <Windows.h>
HWND _relatedWindow()
{
HWND hActive = ::GetActiveWindow();
return hActive;
}
inline const WCHAR* utf16(const QString& str)
{
return reinterpret_cast<const WCHAR*>(str.c_str16());
}
bool copyDirectoryFiles(const QString& srcPath, const QString& desPath, bool bRemoveFlag, bool bSlientFlag)
{
WCHAR szDesPath[MAX_PATH + 2] = {0};
memcpy_s(szDesPath, sizeof(szDesPath), krt::utf16(desPath),
qMin<int>(MAX_PATH, desPath.length()) * sizeof(WCHAR));
WCHAR szSrcPath[MAX_PATH + 2] = {0};
memcpy_s(szSrcPath, sizeof(szSrcPath), krt::utf16(srcPath),
qMin<int>(MAX_PATH, srcPath.length()) * sizeof(WCHAR));
QString strProgressTitle = QObject::tr("Copying Files, Please wait...");
SHFILEOPSTRUCTW tFileOperation = {0};
tFileOperation.hwnd = _relatedWindow();
tFileOperation.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMMKDIR;
if (bSlientFlag)
{
tFileOperation.fFlags |= (FOF_SILENT | FOF_NOCONFIRMATION);
}
tFileOperation.pFrom = szSrcPath;
tFileOperation.pTo = szDesPath;
tFileOperation.hNameMappings = NULL;
tFileOperation.lpszProgressTitle = krt::utf16(strProgressTitle);
tFileOperation.wFunc = bRemoveFlag ? FO_MOVE : FO_COPY;
int nResultCode = ::SHFileOperationW(&tFileOperation);
return 0 == nResultCode;
}
#else
#include "QDir"
//bCoverFile:是否覆盖目标目录文件,bRemoveFlag:是否移除源目录文件
bool KpcdFileUtil::copyDirectoryFiles(const QString& srcPath, const QString& desPath,
bool bCoverFile/* = false*/, bool bRemoveFlag/* = false*/)
{
QDir sourceDir(srcPath);
if(!sourceDir.exists())
return false;
if(QFileInfo(desPath).isFile())
return false;
QDir targetDir(desPath);
if(!targetDir.exists())
{
if(!targetDir.mkpath(desPath))
return false;
}
QFileInfoList fileInfoList = sourceDir.entryInfoList(
QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
for(const QFileInfo& fileInfo : fileInfoList)
{
if(fileInfo.isDir())
{
if(!copyDirectoryFiles(fileInfo.filePath(),
targetDir.absoluteFilePath(fileInfo.baseName()),
bCoverFile, bRemoveFlag))
{
return false;
}
}
else
{
if (bCoverFile)
QFile::remove(targetDir.filePath(fileInfo.fileName()));
if(QFile::copy(fileInfo.filePath(),
targetDir.filePath(fileInfo.fileName())))
{
if(bRemoveFlag && fileInfo.isWritable())
{
QFile::remove(fileInfo.absoluteFilePath());
}
}
else
{
return false;
}
}
}
if(bRemoveFlag)
{
sourceDir.rmdir(sourceDir.absolutePath());
}
return true;
}
#endif
拷贝文件
#include "QFile"
//srcPath源文件路径,dstPath目标文件路径,bCoverFile文件存在的话是否覆盖
bool copyFile(QString srcPath, QString dstPath, bool bCoverFile/* = false*/)
{
#ifdef Q_OS_WIN
srcPath.replace("/", "\\");
dstPath.replace("/", "\\");
#elif defined(Q_OS_LINUX)
srcPath.replace("\\", "/");
dstPath.replace("\\", "/");
#endif
if (srcPath == dstPath)
return true;
//源文件不存在
if (!QFile::exists(srcPath))
return false;
if (QFile::exists(dstPath))
{
if (bCoverFile)
{
QFile::remove(dstPath);
}
}
if (!QFile::copy(srcPath, dstPath))
{
return false;
}
return true;
}
移除文件夹
#include "QDir"
bool RemoveDir(const QString& path)
{
if (path.isEmpty())
return false;
QDir dir(path);
if(!dir.exists())
return true;
dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);
QFileInfoList fileList = dir.entryInfoList();
for (const QFileInfo& fi : fileList)
{
if (fi.isFile())
fi.dir().remove(fi.fileName());
else
RemoveDir(fi.absoluteFilePath());
}
return dir.rmpath(dir.absolutePath());
}
win拷贝文件到文件夹
#include <Windows.h>
inline const WCHAR* utf16(const QString& str)
{
return reinterpret_cast<const WCHAR*>(str.c_str16());
}
HWND _relatedWindow()
{
HWND hActive = ::GetActiveWindow();
return hActive;
}
bool KpcdFileUtil::copyFilesToFolder(const QStringList& srcPathList,
const QString& destFolder, bool bRemoveFlag, bool bSlientFlag/* = false*/)
{
if (srcPathList.isEmpty() || destFolder.isEmpty())
return false;
WCHAR szDestPath[MAX_PATH + 2] = { 0 };
ks_memcpy_s(szDestPath, sizeof(szDestPath), krt::utf16(destFolder),
qMin<int>(MAX_PATH, destFolder.length()) * sizeof(WCHAR));
int srcPathLen = 1; //eg:"D:\\src1.txt\0D:\\src2.txt\0\0"
for (const auto& srcPath : srcPathList)
{
srcPathLen += (srcPath.size() + 1);
}
WCHAR* szSrcPath = new WCHAR[srcPathLen]();
WCHAR* szSrcData = szSrcPath;
for (const auto& srcPath : srcPathList)
{
srcPath.toWCharArray(szSrcData);
szSrcData += (srcPath.size() + 1);
}
QString strProgressTitle = QObject::tr("Copying Files, Please wait...");
SHFILEOPSTRUCTW tFileOperation = { 0 };
tFileOperation.hwnd = _relatedWindow();
tFileOperation.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMMKDIR;
if (bSlientFlag)
{
tFileOperation.fFlags |= (FOF_SILENT | FOF_NOCONFIRMATION);
}
tFileOperation.pFrom = szSrcPath;
tFileOperation.pTo = szDestPath;
tFileOperation.hNameMappings = NULL;
tFileOperation.lpszProgressTitle = krt::utf16(strProgressTitle);
tFileOperation.wFunc = bRemoveFlag ? FO_MOVE : FO_COPY;
int nResultCode = ::SHFileOperationW(&tFileOperation);
delete[] szSrcPath;
return 0 == nResultCode;
}