删除文件和文件夹

前置条件:从另外一个电脑传了一些文件过来,但视频文件是不能使用的,所以想批量删除这些视频文件。

package lambdaDemo;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class deleteFiles {
	private static void deleteFile(File ...files) {
		//应用框架-spring源码(xml解析)
		for (File file : files) {
			// 过滤出视频
			File[] listFiles3 = file.listFiles(new FilenameFilter() {

				@Override
				public boolean accept(File dir, String name) {
					return name.equals("视频");
				}
			});
			if (null != listFiles3 && listFiles3.length > 0) {
				for (File fileDir : listFiles3) {
					File[] listFiles4 = fileDir.listFiles();
					for (File delete : listFiles4) {
						if (delete.isFile()) {
							if (delete.delete()) {
								System.out.println(delete.getName() + "文件删除成功");
							}
						}
					}
					//文件夹只有为空时才能被删除
					if (fileDir.delete()) {
						System.out.println("文件夹删除成功");
					}
				}
			}else {//沒有到含有视频那层文件夹,使用递归
				deleteFile(file.listFiles());
			}
		}
	
	}
	public static void main(String[] args) {
		int i = 0;
		String[] paths = {"F:\\BaiduNetdiskDownload\\大数据","F:\\BaiduNetdiskDownload\\高并发分布式","F:\\BaiduNetdiskDownload\\搜索引擎",
				"F:\\BaiduNetdiskDownload\\性能优化","F:\\BaiduNetdiskDownload\\应用框架"};
		for(String path:paths) {
				File file = new File(path);
				deleteFile(file.listFiles());
		}
		
	}
}
<think> 我们正在讨论Qt中如何删除文件文件夹。根据引用内容,Qt提供了多种类来处理文件文件夹操作,如QFile、QDir、QFileInfo等。删除文件文件夹的方法有所不同,因为文件夹可能包含子文件文件夹,需要递归删除。 引用[2]引用[3]提供了删除文件夹的方法,其中引用[2]给出了一个递归删除文件夹的示例函数。同时,删除文件相对简单,可以直接使用QFile::remove()。 下面我们将详细说明: 1. 删除文件:使用QFile::remove()静态函数,或者先创建QFile对象再调用remove()方法。 2. 删除文件夹(空文件夹):使用QDir::rmdir()。 3. 删除非空文件夹:需要递归删除文件夹内的所有内容(包括所有子文件文件夹),然后删除文件夹本身。 根据引用[2]提供的递归删除文件夹的函数,我们稍作调整解释。 具体实现如下: </think> ### Qt中删除文件文件夹的方法 在Qt中删除文件文件夹,需要根据目标类型(文件/文件夹是否为空采取不同的方法。以下是详细实现方案: #### 一、删除文件 ```cpp #include <QFile> bool deleteFile(const QString &filePath) { QFile file(filePath); if (!file.exists()) return true; // 文件不存在视为成功 bool success = file.remove(); // 执行删除 if (!success) { qDebug() << "删除文件失败:" << file.errorString(); } return success; } ``` #### 二、删除文件夹(含非空文件夹) ```cpp #include <QDir> bool deleteFolder(const QString &folderPath) { QDir dir(folderPath); if (!dir.exists()) return true; // 文件夹不存在视为成功 // 递归删除子项(文件+子文件夹) dir.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); for(const QFileInfo &info : dir.entryInfoList()) { if (info.isDir()) { if (!deleteFolder(info.absoluteFilePath())) return false; } else { if (!QFile::remove(info.absoluteFilePath())) return false; } } // 删除文件夹 return dir.rmdir("."); // 或 QDir().rmdir(folderPath); } ``` #### 三、关键特性对比 | 操作类型 | 方法 | 是否处理非空 | 时间复杂度 | |----------------|--------------------------|--------------|------------| | 删除单个文件 | `QFile::remove()` | - | $O(1)$ | | 删除文件夹 | `QDir::rmdir()` | ❌ | $O(1)$ | | 删除非空文件夹 | 递归删除(如上实现) | ✅ | $O(n)$ | | 强制删除 | 系统命令`rm -rf` | ✅ | $O(n)$ | #### 四、错误处理与注意事项 1. **权限问题**: ```cpp if (!dir.removeRecursively()) { qCritical() << "删除失败:权限不足或文件被占用"; } ``` 2. **跨平台差异**: - Windows:被占用的文件无法删除 - Linux/macOS:可删除但需`rwx`权限 3. **高性能替代方案**: ```cpp // Qt 5.15+ 推荐方法 bool success = QDir(folderPath).removeRecursively(); ``` 4. **安全删除**(覆写后删除): ```cpp QFile file("sensitive.dat"); if (file.open(QIODevice::WriteOnly)) { file.write(QByteArray(file.size(), 0)); // 覆写为0 file.remove(); } ``` #### 五、应用示例 ```cpp // 删除临时目录 QString tempPath = QDir::tempPath() + "/myapp_cache"; if (QFileInfo(tempPath).isDir()) { if (!deleteFolder(tempPath)) { QMessageBox::critical(nullptr, "错误", "清理缓存失败!"); } } else { deleteFile(tempPath); } ``` > **最佳实践**:对于Qt 5.15+环境,优先使用`QDir::removeRecursively()`方法,它内部实现了安全的递归删除逻辑[^1][^2]。旧版本Qt需自行实现递归删除逻辑。 ```mermaid graph TD A[开始删除] --> B{路径存在?} B -- 不存在 --> Z[返回成功] B -- 存在 --> C{是文件?} C -- 是 --> D[调用QFile::remove] C -- 否 --> E[遍历文件夹内容] E --> F{是子文件夹?} F -- 是 --> G[递归删除文件夹] F -- 否 --> H[删除文件] G --> I[删除当前空文件夹] H --> I I --> J{所有项目删除成功?} J -- 是 --> K[删除文件夹] J -- 否 --> L[返回失败] D & K --> M[返回操作结果] ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值