C#-文件夹验证
这里有个新手。上面是我用来排除位于我的根文件夹(myRootFolderPath)中的“SubFolderA”的代码。我需要排除excludeSubFolders变量中列出的所有子文件夹 多谢各位 更新:字符串excludeSubFolders是通过c#code之外的参数填充的。我刚刚以c#所期望的格式列出了该参数的输出。此外,参数今天将具有“SubFolderA、SubFolderB、SubFolderC、SubFolderABC”值,而后天,有人将其更改为“SubFolderA、SubFolderB、SubFolderC”,并调用相同的c代码。这将如何与所提供的字符串数组建议配合使用?C#-文件夹验证,c#,C#,这里有个新手。上面是我用来排除位于我的根文件夹(myRootFolderPath)中的“SubFolderA”的代码。我需要排除excludeSubFolders变量中列出的所有子文件夹 多谢各位 更新:字符串excludeSubFolders是通过c#code之外的参数填充的。我刚刚以c#所期望的格式列出了该参数的输出。此外,参数今天将具有“SubFolderA、SubFolderB、SubFolderC、SubFolderABC”值,而后天,有人将其更改为“SubFolderA、SubFol
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。我如何仍然使用上述逻辑(数组?