【问题标题】:How to get some parts of the directory c#如何获取目录的某些部分c#
【发布时间】:2017-03-15 11:39:55
【问题描述】:

例如,

foreach (var imageFile in Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories))
{
    //add to list
}

imageFile 的输出 = C:\Users\Documents\MyWeb\Slide\Main\slider2.png

我只需要得到\Slide\Main\slider2.png

有什么简单的方法吗?

【问题讨论】:

  • 你如何决定丢弃哪一部分?为什么不直接从图像路径中删除目录路径?例如imageFile.Remove(dir);
  • 那么,应该使用什么规则?对于这种情况,您可以根据MyWeb 拆分路径,但其他目录呢?有没有共同的地方分裂?
  • 这取决于这部分应该如何确定。它总是在路径中的四个文件夹还是其他什么?
  • @DavidG -- 当我们还没有足够的信息时,你怎么能把它当作一个骗子来关闭呢?
  • @rory.ap 它应该总是在 \Slide\ 处分割

标签: c#


【解决方案1】:

由于您正在寻找一个特定的文件夹,您可以这样做:

var imageFile = @"C:\Users\Documents\MyWeb\Slide\Main\slider2.png";
var subFolder = @"\Slide\Main";

var relativePath = imageFile.Substring(
    imageFile.IndexOf(subFolder, StringComparison.OrdinalIgnoreCase));

【讨论】:

    【解决方案2】:

    你可以这样使用:

    string imageFile = @"C:\Users\Documents\MyWeb\Slide\Main\slider2.png";
    string match = System.Text.RegularExpressions.Regex.Match(imageFile,@"\\Slide\\Main\\.*").Value;
    

    【讨论】:

      【解决方案3】:

      为什么不使用 string.Split("\") 它将为您提供该路径的所有块,然后您可以从您想要的位置连接其余部分,或者使用正则表达式,如 @Zalomon 所说

      【讨论】:

        【解决方案4】:

        你可以很容易地用 Uri 做,我已经测试过了,所以它工作正常

        namespace ConsoleApplication1
        {
            class Program
            {
                public static void Main()
                {
                    Uri uriAddress1 = new Uri("C:\\Users\\Documents\\MyWeb\\Slide\\Main\\slider2.png");
                    Console.WriteLine("The parts are {0}{1}{2}", uriAddress1.Segments[5], uriAddress1.Segments[6], uriAddress1.Segments[7]);
                    Console.ReadKey();
                }
            }
        }
        

        【讨论】:

          【解决方案5】:

          我希望我能感谢首先写这篇文章的人,但我已经失去了链接。

          来自我的实用程序集合:

              /// <summary>
              /// Generates a Relative Path for targetPath, from basePath
              /// </summary>
              /// <param name="basePath">The Directory to start from.</param>
              /// <param name="targetPath">Full Path to file or folder that is to be made relative</param>
              /// <returns>The relative location of targetPath, from basePath</returns>
              /// <remarks>Tested in Util.Tests.IO.PathUtilsTests</remarks>
              public static string MakeRelativePath(string basePath, string targetPath)
              {
                  if (basePath == targetPath)
                      return "";
          
                  if (!basePath.EndsWith(Path.DirectorySeparatorChar.ToString()))
                      basePath += Path.DirectorySeparatorChar;
          
                  if (String.IsNullOrEmpty(basePath)) throw new ArgumentNullException("basePath");
                  if (String.IsNullOrEmpty(targetPath)) throw new ArgumentNullException("targetPath");
          
                  var fromUri = new Uri(basePath);
                  var toUri = new Uri(targetPath);
          
                  if (fromUri.Scheme != toUri.Scheme) { return targetPath; } // path can't be made relative.
          
                  var relativeUri = fromUri.MakeRelativeUri(toUri);
                  var relativePath = Uri.UnescapeDataString(relativeUri.ToString());
          
                  if (toUri.Scheme.Equals("file", StringComparison.InvariantCultureIgnoreCase))
                  {
                      relativePath = relativePath.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
                  }
          
                  return relativePath;
              }
          

          用法:

          var output = @"C:\Users\Documents\MyWeb\Slide\Main\slider2.png";
          var basePath = @"C:\Users\Documents\MyWeb\";
          
          var rel = MakeRelativePath(basePath, output);
          

          【讨论】:

          • 是的!这看起来像是我第一次得到这个的地方。
          猜你喜欢
          • 2012-05-14
          • 2017-07-24
          • 1970-01-01
          • 1970-01-01
          • 2015-07-31
          • 1970-01-01
          • 2014-01-07
          • 2019-11-26
          • 1970-01-01
          相关资源
          最近更新 更多