函数解析信息并创建新文件

问题描述:

我需要一个简单的C#程序,我可以传递一个目录,然后它将遍历所有文件夹/子文件夹递归检查.nfo文件。函数解析信息并创建新文件

它需要检查以下标签中的每个文件NFO,并拉出的唯一ID:

<id>xx234567890</id> 

的XX将字母字符,其余的数字。

然后它会创建一个包含在同一文件夹单行的“info.nfo”文件: http://powerhostcrm.com/id/(id#从上面)

因此,如果ID是sy1234567890它会创建一个文件: http://powerhostcrm.com/id/sy1234567890

老实说,如果这可以作为Windows批处理文件或其他更容易完成,那很好。

+1

SOOOO之间搜索代码...你尝试过什么? – 2012-07-11 21:37:54

+0

会''xx234567890'是.nfo文件的标题还是在? – Borophyll 2012-07-11 21:45:32

+0

您的要求不明确。数字值234567890在每个NFO文件中总是相同,或者只是一个9位数字模式,后跟一个空格,并且前面有两个文本字符? – Steve 2012-07-11 21:52:07

该代码使用正则表达式来<ID>

string[] filesNFO = Directory.GetFiles(@".\", "*.nfo", SearchOption.AllDirectories); 
Regex rx = new Regex(@"<id>[A-Za-z]{2}\d+\</id>" 
foreach(string file in filesNFO) 
{ 
    using(StreamReader sr = File.OpenText(file)) 
    { 
     string content = sr.ReadToEnd(); 
     var m = rx.Matches(content); 
     if(m.Count > 0) 
     { 
      using(StreamWriter sw = new StreamWriter("info.nfo", true)) 
      { 
       sw.WriteLine("http://powerhostcrm.com/" + m[0].ToString().TrimStart("<id>").TrimEnd("</id>"); 
      } 
     } 
    } 
} 
+0

谢谢史蒂夫,会给你一枪! – Dizzy49 2012-07-11 23:00:45

+0

获取一对错误。简单的我固定,但我得到'参数1:不能从'System.IO.StreamReader'转换为'字符串' '名字'r'在当前上下文中不存在'我认为这应该是' rx'而不是'r' 'System.Text.RegularExpressions.Regx'是一个'类型',但像'变量'一样使用 – Dizzy49 2012-07-11 23:14:42

+0

@ Dizzy49一些修正添加到上面的代码中。 – Steve 2012-07-12 07:28:27

var files = new DirectoryInfo("Your path").GetFiles("*.nfo", SearchOption.AllDirectories); 
foreach(var file in files) 
{ 
    using(var r = new StreamReader(file.OpenRead())) 
    { 
     string content = r.ReadToEnd(); 
     if(content.Contains("234567890")) 
     { 
      string id = content.Substring(content.IndexOf("234567890") - 2, 11); 
      using(var w = new StreamWriter("info.nfo", true)) // true for append 
      { 
       w.WriteLine("http://powerhostcrm.com/" + id); 
      } 
     } 
    } 
} 

东西沿着这些线。 Lemme知道它是否不起作用。

+0

StreamReader也实现了IDisposable ...但是我相信'File.ReadAllText(...)'会是更好的选择。 – 2012-07-11 21:53:33

+0

@AustinSalonen,你是对的,它更紧凑。尽管如此,不要认为OP实际上关心的代码很脏。 – Dmitriy 2012-07-11 21:57:11

+0

很酷。请注意,这里有一组用户在StreamReader未正确处理的情况下降低了答案。 – 2012-07-11 21:59:25