2011-06-03 42 views
0

char buf [32];如何將C文件操作更改爲Objective C?

FILE * fp = fopen(「test.txt」,「r」);

fscanf(fp,「%s」,buf);

fclose(fp);

我想C以上的文件操作更改爲Objectiv C.

如何改變?

Objcectiv C中沒有fscanf類的東西嗎?

+0

對於什麼是值得的,你可以保留這段代碼,如果你想。 Objective-C是C的超集,所有POSIX文件都可用。儘管如此,請參閱@ Micah的等效答案。 – 2011-06-03 20:43:48

+0

我知道Objective-C是C的超集,但我必須將buf更改爲NSString來執行某些操作。我必須在每個fscanf之後使用[NSString stringWithCString ...]嗎? – user698200 2011-06-03 20:54:56

回答

1

你不知道。您無法直接從FILE *掃描到NSString。但是,一旦你讀入緩衝區,你可以從它創建一個NSString

NSString *str = [NSString stringWithCString: buf encoding: NSASCIIStringEncoding]; // or whatever 

注意,但是,使用fscanf因爲你在這裏會導致緩衝區溢出。您必須爲結尾的空字符指定緩衝區的大小,減一:

fscanf(fp, "%31s", buf); 
+0

Objective C中沒有fscanf這樣的東西嗎? – user698200 2011-06-03 20:48:03

+0

我必須在每個fscanf之後使用[NSString stringWithCString ...]嗎?其實fopen和fclose之間有很多fscanfs。 – user698200 2011-06-03 21:03:31

+0

'NSScanner'可讓您從一個字符串掃描到另一個字符串; 'NSInputStream'讓你讀取一個文件。但是,在Objective-C級別上運行的'fscanf()'沒有確切的等效,否。 – 2011-06-03 21:03:56

2

最好的辦法是使用NSData的在你的文件中讀取,然後創建一個字符串。

NSData *dataContents = [NSData dataWithContentsOfFile: @"test.txt"]; 
NSString *stringContents = [[NSString alloc] initWithData: dataContents 
             encoding: NSUTF8StringEncoding]; 

假設您的文件是UTF8。

沒有意義搞亂緩衝區。讓框架完成骯髒的工作。

編輯:在回答你的評論,如果你真的,真的需要一行一行地讀它,看看Objective-C: Reading a file line by line

+0

我想在執行某些操作的同時逐行讀取文件。讀完文件後我不想那麼做。我怎樣才能做到這一點? – user698200 2011-06-03 20:46:31

+0

請參閱我編輯中的鏈接。 – 2011-06-03 20:52:43

1

你只是想讀取文本文件轉換成字符串?

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編碼。

+0

我簡化了我的代碼太多。 fopen和fclose之間有很多東西。我讀完一行後,必須將buf更改爲NSString。我讀完整個文件後不想這樣做。 – user698200 2011-06-04 14:28:45