我必須去掉文件路徑並獲取父文件夾。在這個文件路徑上使用正則表達式嗎?
說我的路徑是
\\ServerA\FolderA\FolderB\File.jpg
我需要得到它位於= FolderB中
和家長
文件名= File.jog
文件夾folder = FolderA
我總是必須從文件所在的位置上升兩級。
有沒有更簡單的方法或是正則表達式的路要走?
我必須去掉文件路徑並獲取父文件夾。在這個文件路徑上使用正則表達式嗎?
說我的路徑是
\\ServerA\FolderA\FolderB\File.jpg
我需要得到它位於= FolderB中
和家長
文件名= File.jog
文件夾folder = FolderA
我總是必須從文件所在的位置上升兩級。
有沒有更簡單的方法或是正則表達式的路要走?
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
}
}
這就是爲什麼當我認爲Jon Skeet在附近時我不回答C#的問題,沒有辦法打敗他。 :-D – 2010-04-20 19:16:50
查看目錄類(在這種情況下比DirectoryInfo更好的選擇)。它可以滿足您的一切需求。你不應該使用正則表達式或任何其他解析技術。
DirectoryInfo非常適合獲取文件夾和父文件夾,但他也想獲取文件名。 – TLiebe 2010-04-20 19:14:55
路徑有一個靜態方法來正確拉取文件名。 – 2010-04-20 19:16:02
string fileName = System.IO.Path.GetFileName(path);
string parent = System.IO.Path.GetDirectoryName(path);
string parentParent = System.IO.Directory.GetParent(parent);
+1我正在寫這篇文章。 – 2010-04-20 19:16:59
var fi = new FileInfo(@"\\ServerA\FolderA\FolderB\File.jpg");
fi.Name
fi.Directory.Name
fi.Directory.Parent.Name
+1 - 比我的更清潔的解決方案 – house9 2010-04-20 19:15:56
如果你肯定知道你總是處理一個文件和兩個目錄,嘗試採用分體式:
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];
有一些實用功能,它們不易碎。不要自己解析(或構造)路徑字符串。這也是非常難以理解的。 – 2010-04-20 19:16:37
您有幾個選項可以實際使用實際的.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)
我會回答一樣亞當羅賓遜的,但全碟也將這樣的伎倆。我爲他們兩個都做了,並且都應該爲你效勞。 – McAden 2010-04-20 19:19:31