如何获取此文件路径的最后一部分?

时间:2012-08-30 14:47:55

标签: c# io substring filepath

我有一个遵循以下模式的文件路径:

一些\文件\路径\基地\ YYYY \ MM \ DD \ HH \毫米\ Random8.3

我想从2012年及以后提取所有内容,但问题是虽然右侧是标准的,但每个记录的基本目录可能不同。

以下是两个例子:

  1. C:\ TEMP \ X \ 2012 \ 08 \ 27 \ 18 \ 35 \ wy32dm1q.qyt
    退货:2012\08\27\18\35\wy32dm1q.qyt

  2. d:\ TEMP \ X \ Y \ 2012 \ 08 \ 27 \ 18 \ 36 \ tx84uwvr.puq
    退货:2012\08\27\18\36\tx84uwvr.puq

  3. 现在我正在抓取LastIndexOf(Path.DirectorySeparatorChar) N次,以便在2012之前获得字符串的索引,然后从该索引获取子字符串。但是,我有一种感觉,也许还有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

    static void Main(string[] args)
    {
        Console.WriteLine(GetLastParts(@"D:\Temp\X\Y\2012\08\27\18\36\tx84uwvr.puq", @"\", 6));
        Console.ReadLine();
    }

    static string GetLastParts(string text, string separator, int count)
    {
        string[] parts = text.Split(new string[] { separator }, StringSplitOptions.None);
        return string.Join(separator, parts.Skip(parts.Count() - count).Take(count).ToArray());
    }

答案 1 :(得分:3)

这是一个使用正则表达式的解决方案,假设您要查找的格式始终包含\ yyyy \ MM \ dd \ HH \ mm。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(ExtractPath(@"C:\Temp\X\2012\08\27\18\35\wy32dm1q.qyt"));
        Console.WriteLine(ExtractPath(@"D:\Temp\X\Y\2012\08\27\18\36\tx84uwvr.puq"));
    }

    static string ExtractPath(string fullPath)
    {
        string regexconvention = String.Format(@"\d{{4}}\u{0:X4}(\d{{2}}\u{0:X4}){{4}}\w{{8}}.\w{{3}}", Convert.ToInt32(Path.DirectorySeparatorChar, CultureInfo.InvariantCulture));

        return Regex.Match(fullPath, regexconvention).Value;
    }
}

答案 2 :(得分:0)

c#解决方案将是

string str = @"C:\Temp\X\2012\08\27\18\35\wy32dm1q.qyt";
string[] arr=str.Substring(str.IndexOf("2012")).Split(new char[]{'\\'});

答案 3 :(得分:0)

我不认为你当前的做法有什么不妥。这可能是最好的工作。

public string GetFilepath(int nth, string needle, string haystack) {
    int lastindex = haystack.Length;

    for (int i=nth; i>=0; i--)
        lastindex = haystack.LastIndexOf(needle, lastindex-1);

    return haystack.Substring(lastindex);
}

我保持简单(KISS)。更容易调试/维护,可能是正则表达式变体的两倍。