循环目录以处理多个 XML 文件
Posted
技术标签:
【中文标题】循环目录以处理多个 XML 文件【英文标题】:Looping a directory to process multiple XML files 【发布时间】:2013-04-24 02:36:08 【问题描述】:我有一个客户端应用程序,它根据静态路径定位文件并相应地处理它:
string filepath = @"C:\Users\NChamber\Desktop\package\1002423A_attachments.xml";
byte[] byteArray = System.IO.File.ReadAllBytes(filepath);
channel.UploadTransaction(filepath, 27, byteArray);
这对于单个文件更新工作正常,但我需要扫描整个目录以查找所有以“*.xml”结尾的文件并全部处理。
到目前为止,我已经尝试了这个,但收效甚微:
string path = @"C:\Users\NChamber\Desktop\package\";
foreach (string file in Directory.EnumerateFiles(path, "*.xml"))
byte[] byteArray = System.IO.File.ReadAllBytes(path);
channel.UploadTransaction(path, 27, byteArray);
任何建议将不胜感激。
【问题讨论】:
“小成功”是什么意思?你有什么问题? 出于兴趣,channel
是什么类?
【参考方案1】:
看起来您实际上并没有在 foreach 循环中对 file
执行任何操作,您只是在每次迭代中传入 path
。
foreach (string file in Directory.EnumerateFiles(path, "*.xml"))
byte[] byteArray = System.IO.File.ReadAllBytes(path);
channel.UploadTransaction(file, 27, byteArray);
我怀疑你的意思是:System.IO.File.ReadAllBytes(file);
例如:
foreach (string file in Directory.EnumerateFiles(path, "*.xml"))
byte[] byteArray = System.IO.File.ReadAllBytes(file);
channel.UploadTransaction(file, 27, byteArray);
然后:channel.UploadTransaction(file, 27, byteArray);
【讨论】:
GetFiles
与EnumerateFiles
相比没有任何优势,除非您特别需要数组而不是序列。在许多情况下,这是一个劣等的选择。
已编辑。我认为问题不在于EnumerateFiles
。他正在通过ReadAllBytes/UploadTransaction
的路径,这显然是不正确的,我的答案已经有了这个更正,尽管几乎不值得 -1...
你的第一行是“你想要的是Directory.GetFiles
”,这是一个红鲱鱼,实际上会降低代码的整体性能。您已经修复了代码中的错误,但由于您没有明确说明 OP 可以实施您的更改并认为 GetFiles
有所帮助。因此,我认为澄清这一点是个好主意,这样它就不会削弱答案的好处。毕竟,还有什么是反对票?
@Jodrell 没问题,因为我对EnumerateFiles()
不熟悉,所以有点过头了。为了学习,为什么GetFiles
会降低整体性能? (真正的问题)。我将编辑我原来的 cmets 以避免混淆:)
正确,非常感谢您的帮助。令人惊讶的是,浏览这样的东西是多么容易!并感谢你们俩的所有后续 cmets,非常有用的学习。【参考方案2】:
试试这个:
foreach (string file in Directory.GetFiles(path, "*.xml"))
byte[] byteArray = System.IO.File.ReadAllBytes(file);
channel.UploadTransaction(file, 27, byteArray);
【讨论】:
【参考方案3】:循环的一个小错误,你需要用file
而不是path
来调用ReadAllBytes
:
byte[] byteArray = System.IO.File.ReadAllBytes(file);
【讨论】:
以上是关于循环目录以处理多个 XML 文件的主要内容,如果未能解决你的问题,请参考以下文章
批处理文件一次检索一行,然后循环遍历文件目录以查找每行的匹配项