例えば、
string path = @"C:\User\Desktop\Drop\images\";
私は取得する必要があります@"C:\User\Desktop\Drop\
これを行う簡単な方法はありますか?
Path
およびDirectory
クラスを使用できます。
DirectoryInfo parentDir = Directory.GetParent(Path.GetDirectoryName(path));
string parent = parentDir.FullName;
パスがdirectory-separatorcharで終わっていない場合は、異なる結果が得られることに注意してください\
。そのimages
場合、ディレクトリではなくファイル名として理解されます。
の後続の呼び出しを使用することもできますPath.GetDirectoryName
string parent = Path.GetDirectoryName(Path.GetDirectoryName(path));
この動作はここに文書化されています:
返されたパスにはDirectorySeparatorCharまたはAltDirectorySeparatorCharが含まれていないため、返されたパスをGetDirectoryNameメソッドに戻すと、結果文字列に対する後続の呼び出しごとに1つのフォルダーレベルが切り捨てられます。たとえば、パス「C:\ Directory \ SubDirectory \ test.txt」をGetDirectoryNameメソッドに渡すと、「C:\ Directory\SubDirectory」が返されます。その文字列「C:\ Directory \ SubDirectory」をGetDirectoryNameに渡すと、「C:\Directory」になります。
var parent = "";
If(path.EndsWith(System.IO.Path.DirectorySeparatorChar) || path.EndsWith(System.IO.Path.AltDirectorySeparatorChar))
{
parent = Path.GetDirectoryName(Path.GetDirectoryName(path));
parent = Directory.GetParent(Path.GetDirectoryName(path)).FullName;
}
else
parent = Path.GetDirectoryName(path);
私がコメントしたように、GetDirectoryNameは自己折りたたみ型であり、スラッシュをたどることなくパスを返します。次のディレクトリを取得できます。Directory.GetParentを使用して、clouseも有効です。
ページの下部にある例がおそらく役立つでしょう:http: //msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname (v = vs.110).aspx
using System;
namespace Programs
{
public class Program
{
public static void Main(string[] args)
{
string inputText = @"C:\User\Desktop\Drop\images\";
Console.WriteLine(inputText.Substring(0, 21));
}
}
}
出力:
C:\ User \ Desktop \ Drop \
File クラスまたは Path クラスを使用してこれを行う簡単な方法があると思われますが、次のような方法で解決することもできます (注: テストされていません)。
string fullPath = "C:\User\Desktop\Drop\images\";
string[] allDirs = fullPath.split(System.IO.Path.PathSeparator);
string lastDir = allDirs[(allDirs.length - 1)];
string secondToLastDir= allDirs[(allDirs.length - 2)];
// etc...
これにより、「C:\User\Desktop\Drop\」が返されます。たとえば、最後のサブディレクトリ以外のすべてが返されます。
string path = @"C:\User\Desktop\Drop\images";
string sub = path.Substring(0, path.LastIndexOf(@"\") + 1);
末尾にスラッシュがある場合の別の解決策:
string path = @"C:\User\Desktop\Drop\images\";
var splitedPath = path.Split('\\');
var output = String.Join(@"\", splitedPath.Take(splitedPath.Length - 2));