void deleteFiles(const QString& path, const QString& delFileNameTxt, const QString& recycleBinPath)
{
QStringList delFileNames;
QFile file(delFileNameTxt);
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream in(&file);
in.setCodec("UTF-8"); // 设置编码方式为UTF-8
while (!in.atEnd())
{
QString line = in.readLine().trimmed();
if (!line.isEmpty())
{
delFileNames.append(line);
}
}
file.close();
}
else
{
return;
}
int totalFiles = delFileNames.size();
int processedFiles = 0;
QTextCodec* codec = QTextCodec::codecForLocale(); // 获取当前系统的编码方式
for (const QString& name : delFileNames)
{
QByteArray encodedName = codec->fromUnicode(name);
QString delFilePath = byteArrayToUnicode(encodedName);
QString fullPath = path +"/"+ delFilePath ;
if (delFilePath.contains('.')) {
QFile::remove(fullPath);
}
else {
deleteDir(fullPath);
}
}
}
QString byteArrayToUnicode(const QByteArray array) {
// state用于保存转换状态,它的成员invalidChars,可用来判断是否转换成功
// 如果转换成功,则值为0,如果值大于0,则说明转换失败
QTextCodec::ConverterState state;
// 先尝试使用utf-8的方式把QByteArray转换成QString
QString text = QTextCodec::codecForName("UTF-8")->toUnicode(array.constData(), array.size(), &state);
// 如果转换时无效字符数量大于0,说明编码格式不对
if (state.invalidChars > 0)
{
// 再尝试使用GBK的方式进行转换,一般就能转换正确(当然也可能是其它格式,但比较少见了)
text = QTextCodec::codecForName("GBK")->toUnicode(array);
}
return text;
}
bool deleteDir(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(); // 获取所有的文件信息
foreach(QFileInfo file, fileList) { //遍历文件信息
if (file.isFile()) { // 是文件,删除
file.dir().remove(file.fileName());
}
else { // 递归删除
deleteDir(file.absoluteFilePath());
}
}
return dir.rmpath(dir.absolutePath()); // 删除文件夹
}
从文本文件读取文件名,并删除指定路径下的文件
于 2023-06-13 13:33:09 首次发布