Objective-C:パス文字列からファイル名を抽出する


251

私が持っているときNSString/Users/user/Projects/thefile.ext、私が抽出したいですthefile Objective-Cのメソッドで。

それを行う最も簡単な方法は何ですか?


4
[path lastPathComponent]または[[path pathComponents] lastObject]。どちらも 'thefile.ext'を提供します。'ext'を取得するための[path pathExtension]メソッドがありますが、ファイル名については同じではありません。
アントン

回答:


598

NSString参照から取得すると、以下を使用できます。

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

lastPathComponent呼び出しが返されthefile.ext、そしてstringByDeletingPathExtension端から延長サフィックスを削除します。


9
聞いたことがありませんlastPathComponent。ありがとうございました!
Dimitris 2010

6
別の解決策は、これとMarcの回答を組み合わせる[[[NSFileManager defaultManager] displayNameAtPath:path] stringByDeletingPathExtension]ことです(必要なファイルマネージャを使用してください)。これにより、ファイル名が正しくローカライズされ、拡張子が削除されます。
11

1
どうもありがとうございます!これは大いに役立ちました!どのようにして拡張機能を取得するだけですか?

20
@TwoDumplingNSString *myExtension = [myString pathExtension]
chown

ねえ、これはこの議論の後でかなりですが、私はただ何か疑問に思っています。この操作を元に戻すにはどうすればよいですか?プログラムにコードを追加して、ファイルをドラッグアンドドロップできるようにします。どのようにPATH ITSELFを取得すれば、コンピューターがどのファイルにアクセスできるかを知ることができますか?入力したファイルを取得してファイルのパスを取得するにはどうすればよいですか?
クリスチャンクレイター、2015年

37

ユーザーが読み取り可能なファイル名を表示している場合は、を使用しないでくださいlastPathComponent。代わりに、NSFileManagerのdisplayNameAtPath:メソッドにフルパスを渡します。これは基本的に同じことを行いますが、ファイル名を正しくローカライズし、ユーザーの設定に基づいて拡張子を削除するだけです。


1
バンドルの場合は、代わりに[[[NSBundle bundleWithPath:pref] localizedInfoDictionary] objectForKey:@ "CFBundleName"]を使用できます。displayNameAtPathには、このコードがローカライズされた名前を返す拡張機能が含まれています。
ピーターNルイス

1
最初にCFBundleDisplayNameを確認することを忘れないでください。
Peter Hosey

3

@Marcの優れた洞察力にもかかわらず、Swiftでは次のようになっています。

let basename = NSURL(string: "path/to/file.ext")?.URLByDeletingPathExtension?.lastPathComponent
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.