Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-文件夹验证_C# - Fatal编程技术网

C#-文件夹验证

C#-文件夹验证,c#,C#,这里有个新手。上面是我用来排除位于我的根文件夹(myRootFolderPath)中的“SubFolderA”的代码。我需要排除excludeSubFolders变量中列出的所有子文件夹 多谢各位 更新:字符串excludeSubFolders是通过c#code之外的参数填充的。我刚刚以c#所期望的格式列出了该参数的输出。此外,参数今天将具有“SubFolderA、SubFolderB、SubFolderC、SubFolderABC”值,而后天,有人将其更改为“SubFolderA、SubFol

这里有个新手。上面是我用来排除位于我的根文件夹(myRootFolderPath)中的“SubFolderA”的代码。我需要排除excludeSubFolders变量中列出的所有子文件夹

多谢各位

更新:字符串excludeSubFolders是通过c#code之外的参数填充的。我刚刚以c#所期望的格式列出了该参数的输出。此外,参数今天将具有“SubFolderA、SubFolderB、SubFolderC、SubFolderABC”值,而后天,有人将其更改为“SubFolderA、SubFolderB、SubFolderC”,并调用相同的c代码。这将如何与所提供的字符串数组建议配合使用?

  • excludeSubFolders
    更改为
    string[]
    数组:

    string excludeSubFolders = "SubFolderA, SubFolderB, SubFolderC, SubFolderABC";
    
    DirectoryInfo directory = new DirectoryInfo(myRootFolderPath);
    DirectoryInfo[] directories = directory.GetDirectories();
    
        foreach (DirectoryInfo folder in directories)
           if (folder.Name.ToString().Trim() != "SubFolderA")
              {...}
    
  • 使用
    包含
    方法:

    string[] excludeSubFolders = new [] { "SubFolderA", "SubFolderB", "SubFolderC", "SubFolderABC" };
    
    foreach (DirectoryInfo folder in directories)
       if (!excludeSubFolders.Contains(folder.Name))
          {...}
    
  • 要从单个字符串获取
    string[]
    ,请使用
    string.Split()
    方法:

    string[] excludeSubFolders = new [] { "SubFolderA", "SubFolderB", "SubFolderC", "SubFolderABC" };
    
    foreach (DirectoryInfo folder in directories)
       if (!excludeSubFolders.Contains(folder.Name))
          {...}
    

  • 与Marcin的相同,但这会将字符串更改为数组

    编辑:为了消除任何性能影响,我将Split()从循环中去掉(谢谢Marcin)


    我要做的第一件事是将
    excludeSubFolders
    更改为字符串数组,因为这样可以更轻松地使用:

    var excludeArray = excludeSubFolders.Split(new []{", "},
                         StringSplitOptions.RemoveEmptyEntries);
    foreach (DirectoryInfo folder in directories)
    {
      if (!excludeArray.Contains(myRootFolderPath))
      {
        ...
      }
    }
    
    然后,您可以使用LINQ筛选出与排除数组匹配的目录:

    string[] excludeSubFolders = new string[] { "SubFolderA", "SubFolderB", "SubFolderC", "SubFolderABC" };
    
    更新:关于您问题的更新:如果您收到一个逗号分隔的字符串,并且无法使用字符串数组,那么您可以通过编程将该字符串拆分为字符串数组:

    foreach (DirectoryInfo folder in directories.Where(dir => !excludeSubFolders.Contains(dir.Name.ToString().Trim())))
    {
        // ...
    }
    

    字符串数组何时具有.Contains?我还以为是List拥有它呢?@JohnOdom它是
    IEnumerable
    T[]
    上的扩展方法,实现了
    IEnumerable
    。它添加到了.NET的哪个版本?我正在这台计算机上使用.NET 2.0,但似乎找不到它。为什么要使用Trim()?还有字符串上的ToString()?谢谢各位…更新了OP的更多细节。更新如何影响这一点?我想我不能在新的[]{here}中传递整个字符串,对吗@史蒂夫…对我来说是无用的偏执狂?它会在每次迭代中执行分割。如果你想的话,你可以内联它,或者如果你关心性能的话,把它分配给循环外的一个变量。这比回答问题是错误的要好:)更新了OP。这似乎是一个不错的选择,因为它不需要更改变量类型…现在将测试它。关于您的更新,请参阅我的答案。感谢MarcinJuraszek、Mo和Phil K的支持。我将Marcin的var和Phil的Foreach结合起来,工作得非常完美。我不得不选择一个,所以选择了最古老的答案(sry对Mo和Phil:))只是出于好奇,Marcin的var对Mo/Phil的字符串[]有什么adv/disadv,如果有的话?更新了OP。我如何仍然使用上述逻辑(数组?