2010-04-20 53 views
8

我必须去掉文件路径并获取父文件夹。在这个文件路径上使用正则表达式吗?

说我的路径是

\\ServerA\FolderA\FolderB\File.jpg 

我需要得到它位于= FolderB中

  • 和家长

    1. 文件名= File.jog

    2. 文件夹folder = FolderA

    我总是必须从文件所在的位置上升两级。

    有没有更简单的方法或是正则表达式的路要走?

  • +0

    我会回答一样亚当罗宾逊的,但全碟也将这样的伎俩。我为他们两个都做了,并且都应该为你效劳。 – McAden 2010-04-20 19:19:31

    回答

    21

    FileInfo是你的朋友:

    using System; 
    using System.IO; 
    
    class Test 
    { 
        static void Main(string[] args) 
        { 
         string file = @"\\ServerA\FolderA\FolderB\File.jpg"; 
         FileInfo fi = new FileInfo(file); 
         Console.WriteLine(fi.Name);     // Prints File.jpg 
         Console.WriteLine(fi.Directory.Name);  // Prints FolderB 
         Console.WriteLine(fi.Directory.Parent.Name); // Prints FolderA 
        } 
    } 
    
    +1

    这就是为什么当我认为Jon Skeet在附近时我不回答C#的问题,没有办法打败他。 :-D – 2010-04-20 19:16:50

    2

    查看目录类(在这种情况下比DirectoryInfo更好的选择)。它可以满足您的一切需求。你不应该使用正则表达式或任何其他解析技术。

    +0

    DirectoryInfo非常适合获取文件夹和父文件夹,但他也想获取文件名。 – TLiebe 2010-04-20 19:14:55

    +0

    路径有一个静态方法来正确拉取文件名。 – 2010-04-20 19:16:02

    6
    string fileName = System.IO.Path.GetFileName(path); 
    string parent = System.IO.Path.GetDirectoryName(path); 
    string parentParent = System.IO.Directory.GetParent(parent); 
    
    +0

    +1我正在写这篇文章。 – 2010-04-20 19:16:59

    2
    var fi = new FileInfo(@"\\ServerA\FolderA\FolderB\File.jpg"); 
    fi.Name 
    fi.Directory.Name 
    fi.Directory.Parent.Name 
    
    +0

    +1 - 比我的更清洁的解决方案 – house9 2010-04-20 19:15:56

    0

    如果你肯定知道你总是处理一个文件和两个目录,尝试采用分体式:

    string s = @"\\ServerA\FolderA\FolderB\File.jpg"; 
    string[] parts = s.Split('\'); // might need '\\' 
    string file = parts[parts.Length]; 
    string parentDir = parts[parts.Length - 1]; 
    string grandParentDir = parts[parts.Length - 2]; 
    
    +0

    有一些实用功能,它们不易碎。不要自己解析(或构造)路径字符串。这也是非常难以理解的。 – 2010-04-20 19:16:37

    0

    您有几个选项可以实际使用实际的.net对象而不是正则表达式。

    可以使用FileInfo

    FileInfo fileInfo = new FileInfo(@"\\ServerA\FolderA\FolderB\File.jpg"); 
    fileInfo.Name //will give you the file name; 
    DirectoryInfo directory = fileInfo.Directory; //will give you the parent folder of the file (FolderB); 
    directory.Parent; //will give you this directories parent folder (FolderA)