【问题标题】:Looping a directory to process multiple XML files循环目录以处理多个 XML 文件
【发布时间】: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是什么类?

标签: c# sql xml database


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 2012-12-08
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多