char buf [32];如何將C文件操作更改爲Objective C?
FILE * fp = fopen(「test.txt」,「r」);
fscanf(fp,「%s」,buf);
fclose(fp);
我想C以上的文件操作更改爲Objectiv C.
如何改變?
Objcectiv C中沒有fscanf類的東西嗎?
char buf [32];如何將C文件操作更改爲Objective C?
FILE * fp = fopen(「test.txt」,「r」);
fscanf(fp,「%s」,buf);
fclose(fp);
我想C以上的文件操作更改爲Objectiv C.
如何改變?
Objcectiv C中沒有fscanf類的東西嗎?
你不知道。您無法直接從FILE *
掃描到NSString
。但是,一旦你讀入緩衝區,你可以從它創建一個NSString
:
NSString *str = [NSString stringWithCString: buf encoding: NSASCIIStringEncoding]; // or whatever
注意,但是,使用fscanf
因爲你在這裏會導致緩衝區溢出。您必須爲結尾的空字符指定緩衝區的大小,減一:
fscanf(fp, "%31s", buf);
Objective C中沒有fscanf這樣的東西嗎? – user698200 2011-06-03 20:48:03
我必須在每個fscanf之後使用[NSString stringWithCString ...]嗎?其實fopen和fclose之間有很多fscanfs。 – user698200 2011-06-03 21:03:31
'NSScanner'可讓您從一個字符串掃描到另一個字符串; 'NSInputStream'讓你讀取一個文件。但是,在Objective-C級別上運行的'fscanf()'沒有確切的等效,否。 – 2011-06-03 21:03:56
最好的辦法是使用NSData的在你的文件中讀取,然後創建一個字符串。
NSData *dataContents = [NSData dataWithContentsOfFile: @"test.txt"];
NSString *stringContents = [[NSString alloc] initWithData: dataContents
encoding: NSUTF8StringEncoding];
假設您的文件是UTF8。
沒有意義搞亂緩衝區。讓框架完成骯髒的工作。
編輯:在回答你的評論,如果你真的,真的需要向一行一行地讀它,看看Objective-C: Reading a file line by line
我想在執行某些操作的同時逐行讀取文件。讀完文件後我不想那麼做。我怎樣才能做到這一點? – user698200 2011-06-03 20:46:31
請參閱我編輯中的鏈接。 – 2011-06-03 20:52:43
你只是想讀取文本文件轉換成字符串?
NSError *error = nil;
NSString *fileContents = [NSString stringWithContentsOfFile:@"test.txt" withEncoding:NSUTF8StringEncoding error:&error];
if(!fileContents) {
NSLog(@"Couldn't read file because of error: %@", [error localizedFailureReason]);
}
當然,這裏假定使用UTF8編碼。
我簡化了我的代碼太多。 fopen和fclose之間有很多東西。我讀完一行後,必須將buf更改爲NSString。我讀完整個文件後不想這樣做。 – user698200 2011-06-04 14:28:45
對於什麼是值得的,你可以保留這段代碼,如果你想。 Objective-C是C的超集,所有POSIX文件都可用。儘管如此,請參閱@ Micah的等效答案。 – 2011-06-03 20:43:48
我知道Objective-C是C的超集,但我必須將buf更改爲NSString來執行某些操作。我必須在每個fscanf之後使用[NSString stringWithCString ...]嗎? – user698200 2011-06-03 20:54:56