循环目录以处理多个 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);

【讨论】:

GetFilesEnumerateFiles 相比没有任何优势,除非您特别需要数组而不是序列。在许多情况下,这是一个劣等的选择。 已编辑。我认为问题不在于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 文件的主要内容,如果未能解决你的问题,请参考以下文章

批处理-循环文本文件[重复]

批处理文件一次检索一行,然后循环遍历文件目录以查找每行的匹配项

批处理文件以循环通过远程 Git 分支并将每个分支中的类似 CSV 文件复制到本地目录

ftp echo批处理命令,想要用for循环传递多个文件

通过 php 处理 XML 目录

批处理文件以循环遍历文件夹并将文件夹和内容复制到具有相同文件夹名称的目录