【问题标题】:searching for a string in a full path c#在完整路径中搜索字符串c#
【发布时间】:2012-11-10 18:51:03
【问题描述】:

我有大量 MP3 文件的路径。我正在搜索此数组以在整个路径中查找任何内容以匹配正在搜索的内容。它只返回文件名中的匹配项,而不是路径。

旧:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test
{
    class Program
    {
          static void Main(string[] args)
          {
              _search("ant");
              Console.Read();
          }
          static void _search(string var)
          {
              string[] mp3 = new String[1];
              mp3 = Directory.GetFiles("c:\","*.mp3","SearchOption.AllDirectories);
              string[] temp = new string[1];
              int x = 0;
              for (int i = 0; i < mp3.Length; i++)
              {
                  if (mp3[i].Contains(var))
                  {
                      temp[x] = mp3[i];
                      x++;
                      Array.Resize(ref temp, x + 1);
                  }
              }
              _writeArray(temp);
          }
          static void _writeArray(string[] array)
          {
             for (int i = 0; i < array.Length; i++)
             Console.Write(array[i] + "\n");
          }
       }
    }

新:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test
{
     class Program
     {
          static void Main(string[] args)
          {
              List<string> search = searchSong("ant");
              foreach (string song in search)
              {
                  Console.WriteLine(song);
              }
           }

    static List<string> searchSong(string value)
    {
        value = value.ToLower();
        List<string> songs = new List<string>();
        String[] mp3 = null;
        mp3 = Directory.GetFiles(@"c:\users\owner\music\metal\sybreed", "*.mp3", SearchOption.AllDirectories).ToArray();
        foreach (string item in mp3)
        {
            string LowerCaseItem = item.ToLower(); 
            if (LowerCaseItem.Contains(value))
            {
              songs.Add(item);
            }
        }
        return songs;
    }
}

}

【问题讨论】:

  • 一方面,您应该使用List&lt;string&gt;,而不是不断调整数组的大小。
  • 我没有看到您只是在搜索文件名,因为您使用的是GetFiles,它返回文件的名称(包括它们的路径) + string.Contains.
  • 我想我明白了,出于某种原因我没有意识到它是区分大小写的:-/
  • 你应该发布答案,然后所有人都可以看到:)
  • 还没得到答案,才发现自己很蠢。我实际上得到了正确的路径,但它区分大小写。我还没有找到解决办法。

标签: c# string search


【解决方案1】:

试试这个代码:

 class Program
    {
        static void Main(string[] args)
        {
            PrintItems(Search("John Lennon"));
            PrintFileName(Search("John Lennon"));
            Console.Read();
        }

        static string[] Search(string var)
        {
            return Directory.GetFiles(@"K:\mp3", "*" + var + "*.mp3", SearchOption.AllDirectories);
        }

        static void PrintItems(string[] array)
        {
            for (int i = 0; i < array.Length; i++)
                Console.Write(array[i] + "\n");
        }

        static void PrintFileName(string[] array)
        {
            foreach (var item in array)
            {
                FileInfo fi = new FileInfo(item);
                Console.WriteLine(fi.Name);
            }
        }
    }

【讨论】:

    【解决方案2】:

    路径必须作为参数在哪里搜索。

    class program    
    {
    
            static void Main(string[] args)
            {
                List<string> search = searchSong("SomeThing");
                foreach (string song in search)
                {
                    Console.Writeline(song);
                }
            }
    
            public List<string> searchSong(string value)
            {
                List<string> songs = new List<string>();
                String[] mp3 = null;
                mp3 = Directory.GetFiles(@"D:\Songs", "*.mp3", SearchOption.AllDirectories).ToArray();
                foreach (String item in mp3)
                {
                    if (item.Contains(value))
                    {
                        songs.Add(item);
                    }
                }
                return songs;
            }
    
        }
    

    【讨论】:

    • 使用您的代码和 string.ToLower() 我能够解决问题!我很感激。
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多