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