2010-04-20 61 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)