像這樣的時間和我的Objective-C noobness顯示。 : -/NSString:更改文件名,但不是擴展名
因此,我在一個例程上工作得越多,它就變得越複雜,我想知道是不是隻有一個簡單的方法來更改路徑中文件名的名稱。基本上,我想將@"/some/path/abc.txt
更改爲@"/some/path/xyz.txt
- 替換文件名部分,但不更改路徑或擴展名。
謝謝!
像這樣的時間和我的Objective-C noobness顯示。 : -/NSString:更改文件名,但不是擴展名
因此,我在一個例程上工作得越多,它就變得越複雜,我想知道是不是隻有一個簡單的方法來更改路徑中文件名的名稱。基本上,我想將@"/some/path/abc.txt
更改爲@"/some/path/xyz.txt
- 替換文件名部分,但不更改路徑或擴展名。
謝謝!
什麼弗拉基米爾說,剛細分更使它變得更輕鬆閱讀:
NSString *pathToFile = @"/Path/To/File.txt";
NSString *oldFileName = [pathToFile lastPathComponent];
NSString *newFileName = [@"Document" stringByAppendingPathExtension:[oldFileName pathExtension];
NSString *newPathToFile = [pathToFile stringByDeletingLastPathComponent];
[newPathToFile stringByAppendingString:newFileName];
你可以嘗試這樣的事情:
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:
替換該範圍內的內容。
你知道嗎有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
查看NSString docs的「Working With Paths」部分。特別是,lastPathComponent
,pathExtension
和stringByDeletingPathExtension:
應該做你想做的。
嘗試以下操作:
NSString* initPath = ...
NSString *newPath = [[NSString stringWithFormat:@"%@/%@",
[initPath stringByDeletingLastPathComponent], newFileName]
stringByAppendingPathExtension:[initPath pathExtension]];
試試這個:
NSString* path = [startString stringByDeletingLastPathComponent];
NSString* extension = [startString pathExtension];
NSString* replacementFileName = [@"foo" stringByAppendingPathExtension: extension];
NSString result = [path stringByAppendingPathComponent: replacementFileName];
是那些反斜槓真的是反斜槓或反斜槓?除此之外。我非常瞭解你的目標-c。我自己也奮鬥了很長一段時間,用目標C的字符串例程... – hol 2010-07-28 16:55:30
他們應該/不...... \舊習慣很難死。兩年使用mac,我仍然在反斜槓! :-) – 2010-07-29 14:27:13