目录中只有一个子目录时把子目录移动到父目录

news/2025/1/8 15:36:05/

直接上代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace ProcessItems
{public partial class Form1 : Form{public Form1(){InitializeComponent();// 启用拖放treeViewItems.AllowDrop = true;// 拖放进入事件treeViewItems.DragEnter += new DragEventHandler(treeView_DragEnter);// 拖放事件treeViewItems.DragDrop += new DragEventHandler(treeView_DragDrop);}// 允许拖放的文件类型private void treeView_DragEnter(object sender, DragEventArgs e){if (e.Data.GetDataPresent(DataFormats.FileDrop)){e.Effect = DragDropEffects.Copy; // 或者其他效果}else{e.Effect = DragDropEffects.None;}}// 处理拖放事件private void treeView_DragDrop(object sender, DragEventArgs e){string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);foreach (string file in files){// 检查文件是否存在if (/*File.Exists(file) || */Directory.Exists(file)){// 在这里添加文件到TreeView的逻辑treeViewItems.Nodes.Add(new TreeNode(file));}}}private void buttonOK_Click(object sender, EventArgs e){var items = GetAllTreeViewItems(treeViewItems);foreach (var item in items){MoveSingleSubdirectory(item);}}// 递归函数,用于获取TreeView中的所有节点文本private static void GetTreeViewItems(TreeNodeCollection nodes, List<string> itemList){foreach (TreeNode node in nodes){itemList.Add(node.Text); // 添加当前节点的文本到列表中if (node.Nodes.Count > 0){// 如果当前节点有子节点,则递归调用此函数来获取子节点的文本GetTreeViewItems(node.Nodes, itemList);}}}// 公共方法,供外部调用以获取TreeView中的所有项public static List<string> GetAllTreeViewItems(TreeView treeView){List<string> itemList = new List<string>();GetTreeViewItems(treeView.Nodes, itemList);return itemList;}static void MoveSingleSubdirectory(string dirPath){try{// 检查指定的目录是否存在if (!Directory.Exists(dirPath)){Console.WriteLine($"目录 '{dirPath}' 不存在。");return;}// 获取该目录中的所有子目录string[] subDirs = Directory.GetDirectories(dirPath);// 如果子目录数量不等于1,直接返回if (subDirs.Length != 1){Console.WriteLine($"目录 '{dirPath}' 中的子目录数量不是1。");return;}// 获取唯一的子目录路径string subDirPath = subDirs[0];// 获取上一级目录路径string parentDirPath = Directory.GetParent(dirPath).FullName;// 获取当前目录的名字string subDirName = new DirectoryInfo(dirPath).Name;// 目标路径初始为上一级目录加上子目录的名字string destPath = Path.Combine(parentDirPath, subDirName);// 检查是否存在同名目录,如果存在则添加数字进行重命名int counter = 1;while (Directory.Exists(destPath)){destPath = Path.Combine(parentDirPath, $"{subDirName}_{counter}");counter++;}// 移动子目录到上一级目录Directory.Move(subDirPath, destPath);//删除空目录DeleteIfEmpty(parentDirPath);Console.WriteLine($"子目录已成功移动到: {destPath}");}catch (Exception ex){Console.WriteLine($"操作过程中出现错误: {ex.Message}");}}public static bool DeleteIfEmpty(string directoryPath){try{// 检查目录是否存在if (!Directory.Exists(directoryPath)){Console.WriteLine($"目录 '{directoryPath}' 不存在。");return false;}// 获取目录中的所有文件和子目录string[] files = Directory.GetFiles(directoryPath);string[] subDirs = Directory.GetDirectories(directoryPath);// 如果目录中没有文件也没有子目录,则认为是空目录if (files.Length == 0 && subDirs.Length == 0){// 删除空目录Directory.Delete(directoryPath);Console.WriteLine($"空目录 '{directoryPath}' 已被删除。");return true;}else{Console.WriteLine($"目录 '{directoryPath}' 不是空目录。");return false;}}catch (Exception ex){// 捕获并处理可能出现的异常Console.WriteLine($"操作过程中出现错误: {ex.Message}");return false;}}}
}

实现效果,可以用于整理特殊结构的目录。


http://www.ppmy.cn/news/1560527.html

相关文章

CodeFuse IDE 0.7 版本发布,支持 Lint Error 智能改写

CodeFuse IDE 是一款基于蚂蚁自研大模型 CodeFuse 和自研 IDE 框架 OpenSumi 开发的 AI IDE&#xff0c;它支持主流的编程语言&#xff0c;在开发过程中提供单行代码或整个函数的编写建议&#xff0c;此外还支持代码解释、单测生成、问题修复、智能终端等功能&#xff0c;提升开…

8086汇编(16位汇编)学习笔记05.asm基础语法和串操作

8086汇编(16位汇编)学习笔记05.asm基础语法和串操作-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net asm基础语法 1. 环境配置 xp环境配置 1.拷贝masm615到指定目录 2.将masm615目录添加进环境变量 3.在cmd中输入ml&#xff0c;可以识别即配置成功 dosbox…

MAC录屏QuikTimePlayer工具录屏声音小免费解决方案

一、安装驱动&#xff1a; https://www.filmagepro.com/zh-cn/help/how-to-record-audio-with-filmage-screen 驱动链接&#xff1a; https://www.filmagepro.com/downloads/FilmageAudioDevice.pkg 二、录屏麦克风切换为&#xff1a;Filmage Audio Device

node-js Express防盗链

什么是防盗连 一个简单的说明&#xff0c;假如在前端img标签想要引用图片网站上的图片&#xff0c;当你将图片地址放到img标签上想要显示的时候你发现&#xff0c;图片显示不了&#xff0c;这说明网站采用了防盗链。 怎么实现的呢 在请求头中一般会有 Referer&#xff0c;它…

【商业化】【微软商店】微软打包时报找不到img/logo.ico

【背景】 发现用pyinstaller打包后的python项目并不维持原有的文件夹结构,而是将所有资源都放到一个叫_internal的文件夹下,导致inno setup生成安装程序后找不到原本主目录下的img/logo.ico。我采用的解决办法就是将_internal文件夹下的img文件夹拷贝一份到主目录再用inno s…

嵌入式开发之使用 FileZilla 在 Windows 和 Ubuntu 之间传文件

01-FileZilla简介 FileZilla 是一个常用的文件传输工具&#xff0c;它支持多种文件传输协议&#xff0c;包括以下主要协议&#xff1a; FTP (File Transfer Protocol) 这是 FileZilla 最基本支持的协议。FTP 是一种明文传输协议&#xff0c;不加密数据&#xff08;包括用户名和…

技术实践︱利用Docker快速体验Matterport3DSimulator!让视觉语言导航(VLN)任务入门再无门槛!

Matterport3DSimulator 是一个专门用于视觉语言导航&#xff08;Visual Language Navigation, VLN&#xff09;任务研究的仿真平台&#xff0c;它提供了丰富的三维场景和物理交互功能。然而&#xff0c;由于其安装过程的复杂性以及所需数据集的庞大&#xff0c;这为初学者设置了…

C与语言GDB调试

C语言第二十天笔记 GDB GDB是GUN开源组织发布的一款强大的Unix/Linux下的程序调试工具。 GDB常用命令 GDB查看源代码指令——list 显示指定位置的周围的源代码&#xff1b;可以通过行号、文件名、函数名以及三者之间的组合来定位指定位 置&#xff0c;显示代码的行数可以通…