5

例えば、

string path = @"C:\User\Desktop\Drop\images\";

私は取得する必要があります@"C:\User\Desktop\Drop\

これを行う簡単な方法はありますか?

4

7 に答える 7

11

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」になります。

于 2012-12-18T12:45:32.267 に答える
1
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も有効です。

于 2012-12-18T13:08:12.253 に答える
0

ページの下部にある例がおそらく役立つでしょう:http: //msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname (v = vs.110).aspx

于 2012-12-18T12:45:20.533 に答える
0
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 \

于 2012-12-18T12:45:28.647 に答える
0

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...
于 2012-12-18T12:49:52.193 に答える
0

これにより、「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));
于 2012-12-18T12:43:58.237 に答える