我正在尝试使用freopen()
打印到两个不同的文件。
有可能吗?
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex: 0];
NSString *docFile = [docDir stringByAppendingPathComponent: @"sensordata.txt"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:docDir])
{
[fileManager createFileAtPath:docFile contents:nil
attributes:nil];
}
freopen([docFile cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
NSLog(@"GyroData: %f %f %f ",gyroData.rotationRate.x, gyroData.rotationRate.y, gyroData.rotationRate.z);
NSLog(@"DeviceMotion: %f ",magnitude);
第二个NSLog(DeviceMotion ...)应该保存在另一个文件中。
任何想法? 感谢
答案 0 :(得分:0)
目前还不清楚为什么要这样做。你不能只用fprintf
吗?对于对象AFAIK NSLog
只需调用- (NSString*)description
即可轻松完成。
无论如何,这里(可能)如何:
NSLog
很可能直接写入底层STDERR_FILENO
文件描述符(fd)。您可以使用dup2
系统调用更改该fd的目标。
如果您仍想使用FILE*
函数,它看起来像这样(未经测试,需要进行错误检查):
FILE *newlogfile = fopen([docFile fileSystemRepresentation], "a+");
dup2(fileno(newlogfile), STDERR_FILENO);
fclose(newlogfile);
您不必保留指向该文件的指针,因为描述符是重复的。旧的STDERR_FILENO
fd会自动关闭。