2013-06-04 55 views
0

网址,我想使这个:C#名单及排序按文件名

anywhere.com/file/mybirthday.avi 
anywhere.com/file/yourbirthday.avi 
somewhere.com/file/mybirthday.avi 
somewhere.com/file/yourbirthday.avi 

这样:

anywhere.com/file/mybirthday.avi 
somewhere.com/file/mybirthday.avi 
############## 
anywhere.com/file/yourbirthday.avi 
somewhere.com/file/yourbirthday.avi 

我发现了正则表达式的文件名。我把它们分类。所以我的代码在这里:

private void button1_Click(object sender, EventArgs e) 
{ 
    string gelenler = textBox2.Text; 
    gelenler = gelenler.Replace("\r\n\r\n", "\r\n"); 
    string cikti = string.Empty; 
    string regex = @"([^\/\\]+\.\w+)$"; 
    string[] parca = Regex.Split(gelenler, "\r\n"); 
    string[] parca2 = new string[parca.Length]; 
    for (int i = 0; i < parca.Length; i++) 
    { 
     string ad = match(regex, parca[i]); 
     parca2[i] = ad; 
    } 
    Array.Sort(parca2); 

    for (int j = 0; j < parca2.Length; j++) 
    { 
     for (int i = 0; i < parca2.Length; i++) 
     { 
      if (parca2[i].IndexOf(match(regex,parca[j]))!=-1) 
      { 
       textBox1.Text += parca[i] + Environment.NewLine; 
       parca[i] = ""; 
      } 
      textBox1.Text += "#############" + Environment.NewLine; 
      } 

     } 
} 

private string match(string regex, string html, int i = 1) 
{ 
    return new Regex(regex, RegexOptions.Multiline).Match(html).Groups[i].Value.Trim(); 
} 

但没有工作。有任何想法吗 ?

//对不起我的英语

+0

什么时候/您想如何打印“##############”? – aquaraga

+0

Filename1.avi Filename1.avi Filename1.avi ############## Filename2.avi Filename2.avi Filename2.avi – user2451612

+0

你可以查我已经发布的代码 - 你打算根据文件名进行分组吗? – aquaraga

回答

2

我觉得永远是最好的办法是在这种情况下Path.GetFileName使用现有的.NET框架的东西,如:

 var strings = new[] 
         { 
          "anywhere.com/file/mybirthday.avi", 
          "anywhere.com/file/yourbirthday.avi", 
          "somewhere.com/file/mybirthday.avi", 
          "somewhere.com/file/yourbirthday.avi" 
         }; 

     strings = strings.OrderBy(x => Path.GetFileName(x)).ToArray(); 

     foreach (var s in strings) 
     { 
      Console.WriteLine(s);     
     } 

     Console.ReadKey(); 
+0

非常感谢,它的工作原理。 – user2451612

0

您应该使用Uri类。使用Segements属性来获取文件名(它将是最后一个段)。

var uris = new[] 
{ 
    new Uri("http://anywhere.com/file/mybirthday.avi"), 
    new Uri("http://anywhere.com/file/yourbirthday.avi"), 
    new Uri("http://somewhere.com/file/mybirthday.avi"), 
    new Uri("http://somewhere.com/file/yourbirthday.avi") 
}; 

var filename = uris.OrderBy(x => x.Segments[x.Segments.Length - 1]).ToArray(); 
foreach (var f in filename) 
{ 
    Console.WriteLine(f); 
} 
0

我想你是指分组文件;在这种情况下,可以使用以下代码:

 IEnumerable<IGrouping<string, string>> groups = strings.GroupBy(x => Path.GetFileName(x)).OrderBy(g => g.Key); 
     foreach (var group in groups) 
     { 
      foreach (var str in group) 
      { 
       Console.WriteLine(str); 
      } 
      Console.WriteLine("#############"); 
     } 
+0

非常感谢。我确实合并了** Giedrius **和你的代码。它的工作。 //再次抱歉我的英语:) – user2451612