C#获取选中目录下文件对应主容器文件夹名称与路径求助
解决方案
要获取每个文件对应的**最初选中的根目录(主容器文件夹)**的名称和完整路径,核心是直接复用用户选择的根目录变量,不需要从文件路径向上遍历父级。具体修改如下:
步骤1:保存根目录信息
在button1_Click方法中,用户选择文件夹后,先保存根目录的完整路径和名称:
if (FBD.ShowDialog() == DialogResult.OK) { // 清空列表等原有代码不变 listBox1.Items.Clear(); listBox2.Items.Clear(); listBox3.Items.Clear(); listBox4.Items.Clear(); listBox5.Items.Clear(); listBox6.Items.Clear(); listBox7.Items.Clear(); textBox1.Text = FBD.SelectedPath; // 新增:保存根目录的完整路径和名称 string rootPath = FBD.SelectedPath; DirectoryInfo rootDirInfo = new DirectoryInfo(rootPath); string rootFolderName = rootDirInfo.Name; String directoryName = FBD.SelectedPath; DirectoryInfo dirInfo = new DirectoryInfo(directoryName); if (dirInfo.Exists == false) Directory.CreateDirectory(directoryName); // 原有获取文件列表的代码不变 List<String> MyMusicFiles = Directory.GetFiles(textBox1.Text, "*.max", SearchOption.AllDirectories).ToList();
步骤2:遍历文件时添加主容器信息
在foreach循环内部,直接将根目录的名称和路径添加到对应的ListBox:
foreach (string file in MyMusicFiles) { FileInfo mFile = new FileInfo(file); DirectoryInfo directoryInfo = new DirectoryInfo(mFile.DirectoryName); int fCount = Directory.GetFiles(mFile.Directory.FullName, "*.max", SearchOption.TopDirectoryOnly).Length; // 原有添加其他信息的代码不变 listBox4.Items.Add(fCount); listBox2.Items.Add(mFile.Name); listBox3.Items.Add(Path.GetFileName(mFile.DirectoryName)); listBox1.Items.Add(Path.Combine(mFile.DirectoryName, mFile.Name)); // 新增:添加主容器文件夹名称和完整路径 listBox6.Items.Add(rootFolderName); listBox7.Items.Add(rootPath); // 原有listBox5的代码可根据需求保留或调整 if (directoryInfo.Parent != null) { listBox5.Items.Add(Directory.GetParent(mFile.FullName).Parent); } else { string up2 = directoryInfo.Root.ToString().Split(Path.DirectorySeparatorChar)[2]; listBox5.Items.Add(up2); } }
说明
你之前的代码尝试通过directoryInfo.Parent获取父级目录,这是在获取文件所在文件夹的上级目录,而非最初选中的根目录,所以不符合需求。直接复用FBD.SelectedPath和对应的目录名称,就能确保所有文件对应的主容器信息都是用户最初选择的根目录,无论文件处于多少层级的子文件夹中。
内容的提问来源于stack exchange,提问作者Amro Omran
相关产品推荐
相关产品推荐

