如何在目录中找到子文件夹的名称

3
我曾经提出过这种问题,但是这次有所不同。我需要找到一个文件夹的根目录。
例如:
我得到的是:
C:\Program Files (x86)\EdisonFactory\NetOffice
C:\Program Files (x86)\EdisonFactory\NetOffice
C:\Program Files (x86)\EdisonFactory\NetOffice
C:\Program Files (x86)\EdisonFactory\NetOffice
C:\Program Files (x86)\EdisonFactory\NetOffice\Plugins
C:\Program Files (x86)\EdisonFactory\NetOffice\Plugins
C:\Program Files (x86)\EdisonFactory\NetOffice\Plugins

我之前使用过这段代码:

DsVersions.ASSEMBLY2Row row = dsVersions.ASSEMBLY2.NewASSEMBLY2Row();
row.FOLDER = Path.GetDirectoryName(fileName);

然后我发现了这段代码,认为它是答案:

DsVersions.ASSEMBLY2Row row = dsVersions.ASSEMBLY2.NewASSEMBLY2Row();
DirectoryInfo directoryName = new DirectoryInfo(Path.GetDirectoryName(fileName));
row.FOLDER = directoryName.Name;

在这段代码之后,我得到了以下结果:
NetOffice
NetOffice
NetOffice
NetOffice
Plugins
Plugins
Plugins

这很接近,但我需要的只是插件。我已经尝试过路径和文件,但不起作用,总是出现错误。


1
你的意思是“我只需要插件”吗?你是想把最深层的公共目录当作相对路径的根目录吗? - FishBasketGordo
这7个文件名会产生这个输出? - digEmAll
你是指C:\这个根目录还是父级目录,或者其他的什么?你需要详细说明一下,我们需要更多的细节 :) - Bali C
@FishBasketGordo 有点像,插件是在NetOffice里面的,所以我不需要它,插件是一个子目录。如果我表达得很混乱,对不起,我不能很好地解释事情。 - Baked Potato
@FishBasketGordo 嗯,我使用一个DataGrid来发布所有这些内容,还有其他列,比如名称、文件、文件夹和版本。我在文件夹方面遇到了问题。 - Baked Potato
显示剩余2条评论
3个回答

5
根据问题和各种评论,我推断出:
  • 您手头有一个文件路径
  • 该文件位于 Plugins 上方的级别,即:

C:\Program Files (x86)\EdisonFactory\NetOffice

  • 您需要获取该目录下的目录,但不包括该目录本身

如果这些假设成立,那么这将完成您的要求:

var directoryName = "C:\Program Files (x86)\EdisonFactory\NetOffice";

var directory = new DirectoryInfo(directoryName);

row.FOLDER = directory
    .GetDirectories()
    .Select(subDirectory => subDirectory.Name)
    .Single();

1
是的,你的假设是正确的,但我不能使用它。是的,我已经尝试过了,但如果不在row.Folder中,就什么也不会显示出来。我正在使用一个带有数据网格的DataSet。有没有用Substring的方法可以实现这个? - Baked Potato
@SovietOnion:NetOffice 可能有许多子目录,这些子目录无法适应 row.Folder,因为只有一个字符串的空间。你是说你总是期望恰好有一个目录吗? - Bryan Watts
是的,插件,它是唯一的。 - Baked Potato
@SovietOnion:我编辑了我的答案,以考虑在“NetOffice”下恰好有一个目录的情况。 - Bryan Watts

1
例如: 您有一个名为Plugins的子文件夹,位于NetOffice文件夹中,路径如下:
C:\ Program Files(x86)\ EdisonFactory \ NetOffice \ Plugins。
如果您只想获取文件夹插件的名称,则可以尝试以下代码:
string path = @"C:\Program Files (x86)\EdisonFactory\NetOffice";
DirectoryInfo Dictiontory = new DirectoryInfo(path);
DirectoryInfo []Dir = Dictiontory.GetDirectories();// this get all subfolder //name in folder NetOffice.
string dirName = Dir[0]; //var dirName get name from array Dir;

1
            string rootDir = folderBrowserDialog.SelectedPath;
            string fileDir = Path.GetDirectoryName(fileName);
            if (rootDir.Length < fileDir.Length)
                row.FOLDER = fileDir.Substring(rootDir.Length + 1);

搞定了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接