如何检查特定文件夹是否存在于 C# 中的路径中

问题描述

我有一个路径,例如 C:/desktop,我想知道在此路径中是否有任何文件夹命名为文件夹 A、文件夹 B...我不在乎它们中有什么,我只需要知道它们是否存在。我看到有人问过类似的问题,但他们是关于拆分路径名,但我唯一的路径名是最基本的,在其他问题中,路径名就像 c:/desktop/folderA/folderB 我只想知道 C:/desktop/folderA 是否存在并使用一堆其他文件名称进行处理

解决方法

你试过$cest = "2021-04-18 23:34:27 CEST"; $utcCEST = date_create($cest)->setTimeZone(new DateTimeZone('UTC')); echo $utcCEST->format('c'); //2021-04-18T21:34:27+00:00 吗?

GetDirectories()
,

您可以在@mxmissile 提到的 GetDirectories 上使用重载,以明确您只想搜索顶级目录。

System.IO.Directory.GetDirectories("C:/desktop","*",SearchOption.TopDirectoryOnly)
,
if (Directory.Exists(@"location")){
//found it
}
,

您可以使用 System.IO.Directory.GetDirectories

搜索文件夹

在你的情况下,你应该找到你的“文件夹 A”: Directory.GetDirectories(@"C:\desktop\","folderA");

,

您可以尝试检查是否 Directory.Exists()。如果您已经知道要查找哪些文件夹,则可以执行以下操作:

var main_dir = @"C:\desktop\";
string[] folders = {"FolderA","FolderB"};

string[] dir = new string[folders.Length];
for(int i = 0; i < folders.Length; ++i)
{
    dir[i] = Path.Combine(main_dir,folders[i]);
    Console.WriteLine(dir[i]);

    Console.WriteLine(Directory.Exists(dir[i]));
}
,

这就是你的要求。我添加了一个 foreach 来获取所有案例(文件夹 A、b、c ...)

    bool directoryExist = System.IO.Directory.Exists(@"c:\desktop\forder A");
    foreach (var folderPath in System.IO.Directory.GetDirectories(@"c:\desktop"))
    {
        string folderName = System.IO.Path.GetDirectoryName(folderPath);
        if (folderName == "Folder A") { //Case Sensible
            
        }
    }
,

您可以在 Linq 的帮助下尝试 查询

  using System.IO;
  using System.Linq;

  ...

  // Do we have in root
  string root = @"C:/desktop";

  // Any subdir(s) mentioned
  HashSet<string> subdirs = new HashSet<string>(StringComparer.OrdinalIgnoreCase) {
    @"folder A",@"folder B",};

  bool contains = Directory
    .EnumerateDirectories(root,SearchOption.TopDirectoryOnly)
    .Any(dir => subdirs.Contains(new DirectoryInfo(dir).Name)); 

如果您想要深度搜索,请将 SearchOption.TopDirectoryOnly 更改为 SearchOption.AllDirectories(如果 root 本身或其任何子目录具有 subdirs 中提到的文件夹) .您可以更改查询以回答不同的问题:

  // If all subdirs exist:
  bool conatinsAll = Directory
    .EnumerateDirectories(root,SearchOption.TopDirectoryOnly)
    .All(dir => subdirs.Contains(new DirectoryInfo(dir).Name)); 

  // Names of subdirs exist
  string[] existingSubDirs = Directory
    .EnumerateDirectories(root,SearchOption.TopDirectoryOnly)
    .Where(dir => subdirs.Contains(new DirectoryInfo(dir).Name))
    .ToArray();