【问题标题】:How to find the file by its partial name?如何通过部分名称查找文件?
【发布时间】:2012-03-14 18:49:11
【问题描述】:

如何获得完整的文件名?

例如:

我有一个名为171_s.jpg 的文件存储在硬盘上。

我需要通过文件的部分名称(即171_s)找到文件,并获取全名。

我该如何实现?

【问题讨论】:

    标签: c# c#-4.0


    【解决方案1】:

    你可以使用System.IO.Directory.GetFiles()

    http://msdn.microsoft.com/en-us/library/ms143316.aspx

    public static string[] GetFiles(
        string path,
        string searchPattern,
        SearchOption searchOption
    )
    

    路径 类型:System.String 要搜索的目录。

    搜索模式 类型:System.String 与路径中的文件名匹配的搜索字符串。参数不能以两个句点(“..”)结尾或包含两个句点 ("..") 后跟 DirectorySeparatorChar 或 AltDirectorySeparatorChar,也不能包含任何字符 无效路径字符。

    搜索选项 类型:System.IO.SearchOption SearchOption 值之一,指定搜索操作应包括所有子目录还是仅当前 目录。

    【讨论】:

      【解决方案2】:

      你可以这样做:

      ....
      
      List<string> _filesNames;
      
      foreach(var file in _directory)
      {
          string name = GetFileName(file);
          if(name.IndexOf(_partialFileName) > 0)
          {
            _fileNames.Add(name);   
          }
      }
      ....
      

      【讨论】:

        【解决方案3】:

        这是一个使用 GetFiles() 的示例:

        static void Main(string[] args)
        {
            string partialName = "171_s";
            DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(@"c:\");
            FileInfo[] filesInDir = hdDirectoryInWhichToSearch.GetFiles("*" + partialName + "*.*");
        
            foreach (FileInfo foundFile in filesInDir)
            {
                string fullName = foundFile.FullName;
                Console.WriteLine(fullName);
            }    
        }
        

        【讨论】:

        • 这对我很有用,但我需要将 FileInfo 数组转换为字符串数组,并发现以下方法效果更好: string[] filesInDir = Directory.GetFiles(@"c:\ ", "" + 部分名称 + ".*");
        • EnumerateFiles 是这些天的首选方法
        • @hvaughan3 FileInfo 有一个 Name 和 fullname 属性,它会给你加上很多其他选项,而且你会更好地使用信息而不是转换为字符串
        • @MikeT 感谢您的信息。必须对此进行调查并确保它在 Xamarin.Android 和 Xamarin.iOS 上可用。这肯定比使用这些字符串要好。
        • GetFiles 是一个很好的解决方案,但 GetFiles("*" + partialName + "*.*") 可能会返回比 OP 正在寻找的文件更多的文件。在他的情况下 GetFiles(partialName + ".*") 应该足够了
        【解决方案4】:

        更新 - Jakub 回答是更有效的方法。 即,使用 System.IO.Directory.GetFiles() http://msdn.microsoft.com/en-us/library/ms143316.aspx

        答案已经贴出来了,这里是代码方便理解

        string folderPath = @"C:/Temp/";
        DirectoryInfo dir= new DirectoryInfo(folderPath);
        FileInfo[] files = dir.GetFiles("171_s*", SearchOption.TopDirectoryOnly);
        foreach (var item in files)
        {
            // do something here
        }
        

        【讨论】:

          猜你喜欢
          • 2015-06-23
          • 1970-01-01
          • 2021-10-30
          • 2015-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多