【问题标题】:Check a file path belong to folder name检查文件路径是否属于文件夹名称
【发布时间】:2016-09-30 06:15:34
【问题描述】:

我想检查文件夹名称是否包含文件路径。 例如

string filePath = @"C:/vietnam/hello/world/welcome.jpg"
IsFileBelongToFolderName(filePath, "hello");//should return true
IsFileBelongToFolderName(filePath, "hell");//should return false

在简单的情况下,我只是检查文件路径是否包含“/FolderName/”,但不确定它是否适用于任何情况

此检查是否有任何内置函数?

更新 在实际示例中,我们正在创建应用程序来同步文件夹。一些子文件夹包含元文件,所以我们不想同步它。

我们想要传递子文件夹链,而不是传递简单的文件夹名称,例如:folderName = "hello/world"。我认为它不那么复杂,但与.gitignore 文件具有相同的含义。 现在:

string filePath = @"C:/vietnam/hello/world/welcome.jpg"
IsFileBelongToFolderName(filePath, "hello/world");//should return true
IsFileBelongToFolderName(filePath, "hell/world");//should return false
IsFileBelongToFolderName(filePath, "hell");//should return false

【问题讨论】:

    标签: c# .net file io


    【解决方案1】:

    您可以通过使用 DirectorySeparatorChar 拆分 filepath 来做到这一点

    var directoryPath = Path.GetDirectoryName(filepath);
    
    filePath = Path.GetFullPath(directorypath); // Get Canonical  directory path (Credit to @Aron for pointing this.) 
    bool exist = filePath.Split(Path.DirectorySeparatorChar)
                         .Any(x=>x.Equal("hello", StringComparison.InvariantCultureIgnoreCase));
    

    【讨论】:

    • 您应该首先规范化路径。例如c:\foo\bar\baz.txt 属于`c:\foo\bar\qux\..`。
    • 你应该先排除文件名,如果 folderName = "welcome.jpg" 将不起作用
    【解决方案2】:
    string filePath = @"C:/vietnam/hello/world/welcome.jpg";
                string[] folderNames = filePath.Split('/');
                if(folderNames.Contains("hello"))
                {
                       //folder found
                }
    

    【讨论】:

      【解决方案3】:
      public bool IsFileBelongToFolderName(string filePath, string folderName)
      {
          return filePath.Split('/').Contains(folderName);;
      }
      

      public bool IsFileBelongToFolderName(string filePath, string folderName)
      {
           return filePath.Split(Path.DirectorySeparatorChar).Any(x=>x.Equal(folderName, StringComparison.InvariantCultureIgnoreCase));
      }
      

      【讨论】:

        【解决方案4】:

        试试这个

        public bool IsFileBelongToFolderName(string filePath, string name){
            return filePath.ToLower().Contains(@"/"+name.ToLower().Replace(@"/", "")+@"/");
        }
        
        
        string filePath = @"C:/vietnam/hello/world/welcome.jpg";
        
        IsFileBelongToFolderName(filePath,"vietnam"); // return True
        IsFileBelongToFolderName(filePath,"Vietnam"); // return True
        IsFileBelongToFolderName(filePath,"Vietna"); // return false
        IsFileBelongToFolderName(filePath,"welcome.jpg"); // return false
        

        【讨论】:

          猜你喜欢
          • 2012-09-28
          • 1970-01-01
          • 2021-11-09
          • 1970-01-01
          • 2020-08-20
          • 1970-01-01
          • 1970-01-01
          • 2018-05-23
          • 1970-01-01
          相关资源
          最近更新 更多