Geçerli dizin adının (son kısmı) C # ile alın


158

Geçerli dizinin son bölümünü /Users/smcho/filegen_from_directory/AIRPassthroughalmam gerekiyor, örneğin , almam gerekiyor AIRPassthrough.

Python ile, bu kod ile alabilirsiniz.

import os.path

path = "/Users/smcho/filegen_from_directory/AIRPassthrough"
print os.path.split(path)[-1]

Veya

print os.path.basename(path)

Aynı şeyi C # ile nasıl yapabilirim?

KATMA

Yanıtlayanların yardımıyla ihtiyacım olanı buldum.

using System.Linq;
string fullPath = Path.GetFullPath(fullPath).TrimEnd(Path.DirectorySeparatorChar);
string projectName  = fullPath.Split(Path.DirectorySeparatorChar).Last();

veya

string fullPath = Path.GetFullPath(fullPath).TrimEnd(Path.DirectorySeparatorChar);
string projectName = Path.GetFileName(fullPath);


1
Python'da yapmalısınız os.path.basename(path).
ReneSac

Yanıtlar:


132

Arıyorsunuz Path.GetFileName.
Yol a ile biterse bunun işe yaramayacağını unutmayın \.


3
@anti: Yanlış; Denedim. Dizeler dizgidir. Path.GetFileName("/Users/smcho/filegen_from_directory/AIRPassthrough")Bana inanmıyorsanız, LINQPad'e yapıştırın .
SLaks

@antisanity Hayır, dizin adını döndürür, ancak muhtemelen sorunun ne olduğu tam olarak değildir.
Jakob Möllås

@ Jakob: Başlık göz önüne alındığında, bence soru bu.
SLaks

3
@Light: Bu does iş; dene. PathSınıf hem ayırıcılar işler.
SLaks

31
Directory.GetDirectories tarafından alınan bir dizin ile bu çalışması için şunu kullanın: string directoryName = Path.GetFileName (directory.TrimEnd (Path.DirectorySeparatorChar));
Fatlad

185

Deneyebilirsiniz:

var path = @"/Users/smcho/filegen_from_directory/AIRPassthrough/";
var dirName = new DirectoryInfo(path).Name;

20
Bunu seçilen cevaptan daha iyi seviyorum. (Ab) GetFileName'i kullanmak, almaya çalıştığınız bir dizin olduğundan anlamsal olarak yanlıştır. Ayrıca, GetFileName'i deterministik yapmak için, ileri eğik çizgi veya ters eğik çizgi olasılığını hesaba katmanız ve çirkin olan kırpmanız gerekir.
Simon Brangwin

var dirName = new DirectoryInfo (Path.GetDirectoryName (pathWithFilename)). Adı // daha iyi
kernowcode

@kernowcode Ben OP tarafından talep edildiği gibi '' AIRPassthrough "yerine" filegen_from_directory "döneceğini düşünüyorum.
codybartfast

1
@SimonBrangwin Her şeyin Linux'ta bir dosya olduğunu düşündüm :)
Razor

12

Eh, hiç tam olarak soru başlığını cevap :-)

var lastPartOfCurrentDirectoryName = 
   Path.GetFileName(Environment.CurrentDirectory);

12

Bu, sahip olduğunuz şeye bağlı olarak biraz farklı bir cevaptır. Bir dosya listeniz varsa ve dosyanın bulunduğu son dizinin adını almanız gerekiyorsa bunu yapabilirsiniz:

string path = "/attachments/1828_clientid/2938_parentid/somefiles.docx";
string result = new DirectoryInfo(path).Parent.Name;

Bu "2938_parentid" döndürecektir


8

bölme çağrısı için '/' kullanmak yerine Path.DirectorySeparatorChar:

şöyle:

path.split(Path.DirectorySeparatorChar).Last() 

1
Bu çözümü kullanmaktan hoşlanmadığım bir şey, dizenin nereden geldiğine dair bir varsayım oluşturmasıdır. Bir Windows Sisteminde * nix günlüklerini okuyorlarsa ne olur? Sonra yanlış karakter kullanılacak ve amaçlanan etki yerine tüm yol ile sonuçlanacaksınız. Sadece 2 sentim.
Bob G

Bu konuda sana katılıyorum. OP 'şu anki dizinin son kısmı' dedi, bunun için bu iyi.
Muad'Dib

6
var lastFolderName = Path.GetFileName(
    path.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar));

Yol ileri eğik çizgi ayırıcıları veya ters eğik çizgi ayırıcıları içeriyorsa bu işe yarar.


1
String.TrimEnd () birden çok karakteri kabul ettiğinden, birden fazla çağrı kullanmaya gerek yoktur. msdn.microsoft.com/en-us/library/…
Kyle Delaney

1
@KyleDelaney öyle! Yanıt ayarlandı.
Holf

1
Bu bir params dizisidir, bu yüzden de .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)çalışır.
Kyle Delaney

1
Uygulanan .TrimEnd () konumu yanlış. Bu uygulanması gerektiğini yolu değil, Path.GetFileName . @Fatlad
Tony

2

Bunu dene:

String newString = "";
Sting oldString = "/Users/smcho/filegen_from_directory/AIRPassthrough";

int indexOfLastSlash = oldString.LastIndexOf('/', 0, oldString.length());

newString = oldString.subString(indexOfLastSlash, oldString.length());

Kod kapalı olabilir (test etmedim) ama fikir işe yarayacak


1

Bu benimle mükemmel çalışıyor :)

Path.GetFileName(path.TrimEnd('\\')


0

Uri sınıfını da kullanabilirsiniz.

new Uri("file:///Users/smcho/filegen_from_directory/AIRPassthrough").Segments.Last()

Başka bir segment almak istiyorsanız veya aynı şeyi bir web adresiyle yapmak istiyorsanız bu sınıfı kullanmayı tercih edebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.