[英]Add an item to a collection just before it starts looping in C#
How do I dynamically add another path before looping to Directory.GetDirectories? 如何在循环到Directory.GetDirectories之前动态添加其他路径? :
:
foreach (string d in Directory.GetDirectories(dirpath))
{
foreach (string f in Directory.GetFiles(d))
{
Console.WriteLine(f);
File.Copy(f,"");
}
}
For example I need it like 例如我需要它
foreach (Directory dir in Directory.GetDirectories(dirpath).Add("another path"))
{
//My other code here....
}
How to do it? 怎么做?
Thanks 谢谢
Maybe something like this: 也许是这样的:
Directory.GetDirectories(dirpath).Concat(new string[] { "another path"});
You need to add using System.Linq;
您需要
using System.Linq;
添加using System.Linq;
at the top of your class. 在全班最重要的位置
You can't foreach (Directory dir
because Directory
is a static class and you can't have an instance of it. But you can use DirectoryInfo
: 您不能
foreach (Directory dir
因为Directory
是一个静态类,您不能拥有它的实例。但是您可以使用DirectoryInfo
:
var dirs = Directory.GetDirectories(dirpath)
.Concat(new string[] { "another path" })
.Select(path => new DirectoryInfo(path));
foreach (DirectoryInfo dir in dirs)
{
}
var dir = Directory.GetDirectories(dirpath);
dir.Add("another path");
foreach (string d in dir)
{
foreach (string f in Directory.GetFiles(d))
{
Console.WriteLine(f);
File.Copy(f,"");
}
}
For achieving such a goal you may use a recursive approach like: 为了实现这一目标,您可以使用以下递归方法:
public void Fileprocessing(directories){
foreach (string d in directories)
{
foreach (string f in Directory.GetFiles(d))
{
Console.WriteLine(f);
File.Copy(f,"");
}
}
if(conditionToAddPath){
directories.Add("another path");
Fileprocessing(directories);
}
}
and when you call the first time initialize your directories like: 并在第一次调用时初始化目录,例如:
... ...
string[] directories = Directory.GetDirectories(dirpath);
Fileprocessing(directories);
... ...
Note: this is a pseudo-coded answer!! 注意:这是伪编码的答案!! please review before implementing or complete this answer by adding ready to use implementation code.
请在实施之前查看,或通过添加准备使用的实施代码来完成此答案。
one way using SelectMany
: 一种使用
SelectMany
:
var paths = new List<string> { "path1", "path2", "path3" };
var files = paths.SelectMany(Directory.GetDirectories).SelectMany(Directory.GetFiles);
paths.Add("path4");
foreach (var file in files)
Console.WriteLine(file);
another way using select
: 使用
select
另一种方式:
var paths = new List<string> { "path1", "path2", "path3" };
var query = from path in paths
from dir in Directory.GetDirectories(path)
from file in Directory.GetFiles(dir)
select file;
paths.Add("path4");
foreach (var file in query)
Console.WriteLine(file);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.