C# - 文件夹验证
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")
{...}
C#新手在这里。以上是我用来排除驻留在我的根文件夹(myRootFolderPath)中的“SubFolderA”的代码。我需要排除excludeSubFolders变量中列出的所有子文件夹。C# - 文件夹验证
谢谢
UPDATE:字符串excludeSubFolders正在通过参数填充的C#代码之外。我刚刚以c#预期的格式列出了该参数的输出。此外,该参数今天会有“SubFolderA,SubFolderB,SubFolderC,SubFolderABC”值,而后天,有人会将其更改为“SubFolderA,SubFolderB,SubFolderC”并调用相同的c#代码。这将如何与提出的字符串数组建议?
-
变化
excludeSubFolders
是string[]
数组:string[] excludeSubFolders = new [] { "SubFolderA", "SubFolderB", "SubFolderC", "SubFolderABC" };
-
使用
Contains
方法:foreach (DirectoryInfo folder in directories) if (!excludeSubFolders.Contains(folder.Name)) {...}
-
要获得
string[]
从单一字符串中使用String.Split()
方法:var subFolders = input.Split(',').Select(x => x.Trim()).ToArray();
什么时候string数组有.Contains?我认为这是List吗? –
@JohnOdom这是'IEnumerable
它添加了什么版本的.NET?我在这台电脑上使用.NET 2.0,我似乎无法找到它。 –
同马辛的,但这种改变字符串为您的阵列...
编辑:否定任何性能影响,我把斯普利特()退出循环(感谢马辛)
var excludeArray = excludeSubFolders.Split(new []{", "},
StringSplitOptions.RemoveEmptyEntries);
foreach (DirectoryInfo folder in directories)
{
if (!excludeArray.Contains(myRootFolderPath))
{
...
}
}
它会在每次迭代时执行分割。 – MarcinJuraszek
如果需要,可以将其内联,或者如果您担心性能,可将其分配给循环外的变量。这比回答说,这个问题是错误的:) –
更新了OP。这似乎是一个很好的选择,因为它不需要改变变量类型......现在就测试它。 – 007
我首先要做的是改变你的excludeSubFolders
到字符串数组,因为这使得它更容易的工作:
string[] excludeSubFolders = new string[] { "SubFolderA", "SubFolderB", "SubFolderC", "SubFolderABC" };
那么你可以使用LINQ筛选出符合您排除阵列,该目录:
foreach (DirectoryInfo folder in directories.Where(dir => !excludeSubFolders.Contains(dir.Name.ToString().Trim())))
{
// ...
}
UPDATE:关于更新你的问题:如果你被交给一个逗号分隔的字符串和不能使用字符串数组,然后你可以将字符串拆分为一个字符串数组编程︰
string excludeSubFolders = "SubFolderA, SubFolderB, SubFolderC, SubFolderABC";
string[] excludeSubArray = excludeSubFolders.Split(new []{", "}, StringSplitOptions.RemoveEmptyEntries);
foreach (DirectoryInfo folder in directories.Where(dir => !excludeSubArray.Contains(dir.Name.ToString().Trim())))
{
// ...
}
关于您的更新,请参阅我的答案。 –
谢谢MarcinJuraszek,Mo和Phil K的支持。我将Marcin的变种与Phil的foreeach结合起来,并且工作完美。我不得不选择一个,所以选择了最旧的答案(对莫和菲尔:))只是出于好奇,Marcin的变种对Mo/Phil的字符串[]有什么副作用? – 007