遍历配置文件中的路径列表
本文关键字:路径 列表 配置文件 遍历 | 更新日期: 2023-09-27 18:06:58
我有一个控制台应用程序,其中有几个foreach循环,迭代路径并从csv文件解析出电子邮件地址。但是,我需要我的循环从配置文件中读取,而不是遍历目录,然后最终为每个电子邮件地址调用现有的API端点。这是我现在的代码:
static void RunTask(string[] args)
{
foreach (string folders in Directory.EnumerateDirectories("C:''tests"))//looks at every folder within this main folder called tests --this needs to read the list of paths
{
foreach (string path in Directory.EnumerateFiles(folders, "*.csv"))//looks at every file with the extension ".csv" in each folder
{
Debug.Write("'n" + path + "'n"); //writes out file names
using (StreamReader sr = new StreamReader(path))
{
String line;
while ((line = sr.ReadLine()) != null)
{
string[] parts = line.Split(',');
string email = parts[1];
Debug.Write(email + "'n");//writes out email column
}
}
}
}
}
这就是我的路径。配置文件:
<pathsSettings>
<paths>
<add Path="C:'tests'first"
TemplateId="123456">
</add>
<add Path="C:'tests'second"
TemplateId="tem_56hyNijCXxGP52ZrgdWziC ">
</add>
<add Path="C:'tests'third"
TemplateId="tem_2wWT6YfGkDXSntEPKhHCWB ">
</add>
</paths>
</pathsSettings>
我不确定我应该如何写我的foreach从这些路径的列表中绘制。
public class PathTemplate
{
public string path { get; set; }
public string template { get; set; }
}
public static string getxml()
{
return "<pathsSettings>" +
"<paths>" +
"<add Path='"C:''tests''first'" TemplateId='"123456'"></add>" +
"<add Path='"C:''tests''second'" TemplateId='"tem_56hyNijCXxGP52ZrgdWziC '"></add>" +
"<add Path='"C:''tests''third'" TemplateId='"tem_2wWT6YfGkDXSntEPKhHCWB '"></add>" +
"</paths>" +
"</pathsSettings>";
}
var xdoc = XDocument.Parse(getxml());
Console.WriteLine(xdoc);
var pts = xdoc.Elements("pathsSettings")
.Elements("paths")
.Elements("add").
Select(p => new PathTemplate()
{
path = p.Attribute("Path").Value.ToString(),
template = p.Attribute("TemplateId").Value.ToString()
}).ToList();
这对我有用:
var doc = XDocument.Parse(@"<pathsSettings>
<paths>
<add Path=""C:'tests'first""
TemplateId=""123456"">
</add>
<add Path=""C:'tests'second""
TemplateId=""tem_56hyNijCXxGP52ZrgdWziC "">
</add>
<add Path=""C:'tests'third""
TemplateId=""tem_2wWT6YfGkDXSntEPKhHCWB "">
</add>
</paths>
</pathsSettings>");
var paths =
doc
.Root
.Descendants("add")
.Select(e => e.Attribute("Path").Value)
.ToList();
给了我这些路径列表:
C:'tests'first
C:'tests'second
C:'tests'third
如果对象正确,则可以对xml进行反序列化。我认为你的类应该是这样的:
[Serializable()]
public class add
{
[System.Xml.Serialization.XmlAttribute("Path")]
public string Path { get; set; }
[System.Xml.Serialization.XmlAttribute("TemplateId")]
public string TemplateId { get; set; }
}
[Serializable()]
[System.Xml.Serialization.XmlRoot("pathsSettings")]
public class pathsSettings
{
[XmlArray("paths")]
[XmlArrayItem("add", typeof(add))]
public add[] paths { get; set; }
}
你可以像这样遍历
public void DoWhatever(){
pathsSettings myObject;
// Construct an instance of the XmlSerializer with the type
// of object that is being deserialized.
XmlSerializer mySerializer = new XmlSerializer(typeof(pathsSettings));
// To read the file, create a FileStream.
FileStream myFileStream = new FileStream(@"yourpath'Path.config", FileMode.Open);
// Call the Deserialize method and cast to the object type.
myObject = (pathsSettings)mySerializer.Deserialize(myFileStream);
foreach(add addObj in myObject.paths)
{
Console.WriteLine(addObj.Path);
Console.WriteLine(addObj.TemplateId);
}
}
这个方法要求你有正确的对象,但在长期运行中,你可以使用这些对象来序列化你的值,如果需要的话,所以编辑你的配置文件。如果你还需要你的TemplateId,那么你已经在你的"add" Object