2010-07-28 119 views
2

像這樣的時間和我的Objective-C noobness顯示。 : -/NSString:更改文件名,但不是擴展名

因此,我在一個例程上工作得越多,它就變得越複雜,我想知道是不是隻有一個簡單的方法來更改路徑中文件名的名稱。基本上,我想將@"/some/path/abc.txt更改爲@"/some/path/xyz.txt - 替換文件名部分,但不更改路徑或擴展名。

謝謝!

+3

是那些反斜槓真的是反斜槓或反斜槓?除此之外。我非常瞭解你的目標-c。我自己也奮鬥了很長一段時間,用目標C的字符串例程... – hol 2010-07-28 16:55:30

+0

他們應該/不...... \舊習慣很難死。兩年使用mac,我仍然在反斜槓! :-) – 2010-07-29 14:27:13

回答

4

什麼弗拉基米爾說,剛細分更使它變得更輕鬆閱讀:

NSString *pathToFile = @"/Path/To/File.txt"; 
NSString *oldFileName = [pathToFile lastPathComponent]; 
NSString *newFileName = [@"Document" stringByAppendingPathExtension:[oldFileName pathExtension]; 
NSString *newPathToFile = [pathToFile stringByDeletingLastPathComponent]; 
[newPathToFile stringByAppendingString:newFileName]; 
+0

給出:@「/ Path/ToDocumenttxt「,因爲將舊名稱分解爲組件的方法不保留尾隨/或。爲擴展。 – JeremyP 2010-07-28 17:43:12

+0

Doh!在這裏輸入它沒有CodeSense,忘了stringByAppendingPathComponent和stringByAppendingPathExtension :) – peelman 2010-08-05 12:32:40

2

你可以嘗試這樣的事情:

NSRange slashRange = [myString rangeOfString:@"\\" options:NSBackwardsSearch]; 
NSRange periodRange = [myString rangeOfString:@"." options:NSBackwardsSearch]; 
NSString *newString = [myString stringByReplacingCharactersInRange:NSMakeRange(slashRange.location, periodRange.location) withString:@"replacement-string-here"]; 

這段代碼所做的就是得到\.字符的位置,並使其返回字符串在它最後一次出現執行向後搜索。 然後,它會基於這些先前的範圍創建一個新範圍,並用stringByReplacingCharactersInRange:替換該範圍內的內容。

+1

你知道嗎有NSString方法可以讓你操作文件系統路徑嗎?特別是,它們是路徑分隔符不可知的,因此您不必擔心使用錯誤的路徑(就像您在這裏獲得Apple本機文件系統一樣)。 http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/doc/uid/20000154-SW38 – JeremyP 2010-07-28 17:30:52

3

查看NSString docs的「Working With Paths」部分。特別是,lastPathComponent,pathExtensionstringByDeletingPathExtension:應該做你想做的。

6

嘗試以下操作:

NSString* initPath = ... 
NSString *newPath = [[NSString stringWithFormat:@"%@/%@", 
        [initPath stringByDeletingLastPathComponent], newFileName] 
        stringByAppendingPathExtension:[initPath pathExtension]]; 
1

試試這個:

NSString* path = [startString stringByDeletingLastPathComponent]; 
NSString* extension = [startString pathExtension]; 
NSString* replacementFileName = [@"foo" stringByAppendingPathExtension: extension]; 
NSString result = [path stringByAppendingPathComponent: replacementFileName];