目标 C - freopen 命令创建文件但不重定向输出

问题描述 投票:0回答:1

我在应用程序委托 onfinishedlaunchingwithoptions 方法中使用以下几行来尝试将 NSLog 输出重定向到文件。这是许多 SO 答案中的代码。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"mylog.txt"];
freopen([logPath fileSystemRepresentation],"a+",stderr);

文件正在创建,但它是空的。另外,据我了解,这应该会阻止 NSLog 消息出现在 XCode 控制台中,但它们仍然会出现。

感谢所有帮助。

objective-c xcode
1个回答
0
投票

以下源代码创建一个名为 MyLog() 的 C 函数。您需要在项目中内联包含此函数并像 NSLog() 一样调用它,即 MyLog(@"Some text."); 。然后,该函数中的字符串将写入您的日志文件。它只写入单个字符串,并且每次使用时都会覆盖日志文件。

void MyLog( NSString *formatString, ... ) {
    va_list ap;
    va_start( ap, formatString );
    
    NSString *format = [[NSString alloc] initWithFormat:@"%@\n", formatString];
    NSString *string = [[NSString alloc] initWithFormat:format arguments:ap];
   
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"mylog.txt"];
    NSData* data = [string dataUsingEncoding:NSUTF8StringEncoding];
    [[NSFileManager defaultManager] createFileAtPath:logPath contents:data attributes:nil];
    
    va_end( ap );
}

© www.soinside.com 2019 - 2024. All rights reserved.