Objective-C: Dosya adını yol dizesinden ayıkla


251

Ben varken NSStringile /Users/user/Projects/thefile.extben ayıklamak istiyorum thefileObjective-C yöntemleri ile.

Bunu yapmanın en kolay yolu nedir?


4
[yol lastPathComponent] veya [[yol pathComponents] lastObject]. Her ikisi de 'thefile.ext' komutunu verir. 'Ext' almak için [path pathExtension] yöntemi vardır, ancak dosya adı için aynı değildir.
Anton

Yanıtlar:


598

NSString referansından alınan şunları kullanabilirsiniz:

NSString *theFileName = [[string lastPathComponent] stringByDeletingPathExtension];

lastPathComponentÇağrı dönecektir thefile.extve stringByDeletingPathExtensionucundan uzatma eki kaldıracaktır.


9
Hiç duymadım lastPathComponent. Teşekkür ederim!
Dimitris

6
Başka bir çözüm, bunun ve Marc'ın cevaplarının bir kombinasyonu olacaktır: [[[NSFileManager defaultManager] displayNameAtPath:path] stringByDeletingPathExtension](istediğiniz dosya yöneticisini kullanın). Bu, dosya adının doğru bir şekilde yerelleştirilmesini ve uzantının kaldırılmasını sağlar.
willurd

1
Çok teşekkür ederim! Bu çok yardımcı oldu! Yine de uzantıyı nasıl alırsınız?

20
@TwoDumplingNSString *myExtension = [myString pathExtension]
chown

Hey, bu tartışmadan biraz sonra, ama sadece bir şey merak ediyorum. Bu işlemi nasıl tersine çevirebilirim? Sonunda bir dosyayı sürükleyip bırakabileceğim programıma bazı kodlar ekleyeceğim. PATH ITSELF'i nasıl edinebilirim, böylece bilgisayarım hangi dosyaya erişeceğini bilebilir? Girilen dosyayı nasıl alıp yolunu nasıl alabilirim?
Christian Kreiter

37

Bir kullanıcı tarafından okunabilir dosya adını görüntüleyen ediyorsanız, do not kullanmak istiyorum lastPathComponent. Bunun yerine, tam yolu NSFileManager'ın displayNameAtPath:yöntemine iletin . Bu temelde aynı şeyi yapar, yalnızca dosya adını doğru bir şekilde yerelleştirir ve kullanıcının tercihlerine göre uzantıyı kaldırır.


1
Paketler için bunun yerine [[[NSBundle bundleWithPath: pref] localizedInfoDictionary] objectForKey: @ "CFBundleName"] kullanmak isteyebilirsiniz. displayNameAtPath, bu kodun yerelleştirilmiş adı döndürdüğü uzantıyı içerir.
Peter N Lewis

1
Önce CFBundleDisplayName'i kontrol etmeyi unutmayın.
Peter Hosey

3

Yıllarca geç ve konu dışı olma riski altında ve @ Marc'ın mükemmel görüşüne rağmen Swift'te şöyle görünüyor:

let basename = NSURL(string: "path/to/file.ext")?.URLByDeletingPathExtension?.lastPathComponent
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.