로그 등 내용을 파일에 인쇄하고 추가

10245 단어
필요에 따라 로그 파일을 파일에 인쇄하여 저장하거나 서버에 업로드해야 합니다. 코드는 다음과 같습니다.
(인쇄할 내용은 NSString)
방법 1.성공적으로 인쇄되었지만, 아래의 이런 방식은 이 파일을 끊임없이 열고, 끊임없이 닫는 것을 주의해야 한다. (정상적인 코드에서는 한 번 열고, 한 번 닫으면 된다. 왜냐하면 파일 흐름을 열고 닫는 작업은 시간이 많이 걸리기 때문이다.)
#define recordFilePath (@"/Users/heqin/Desktop/recordRequstTimeLast.log")
NSDate *curDate = [NSDate date];
NSTimeInterval lastTimeLength = [curDate timeIntervalSinceDate:requestHappenDate];
NSString *resultString = [NSString stringWithFormat:@"%@, interval=%f, success=%@", [request.url path], lastTimeLength, success?@"YES":@"NO"];
FILE *file = fopen([recordFilePath UTF8String], [@"ab+"UTF8String]);
if (file != NULL) {
    fseek(file, 0, SEEK_END);
}
NSData *resultData = [resultString dataUsingEncoding:NSUTF8StringEncoding];
int readSize = [resultData length];
fwrite((const void *)[resultData bytes], readSize, 1, file);
fclose(file);
방법 2.(이런 방법은 OC 코드에 더 가까워 보인다)
 NSFileManager *file_manager = [NSFileManager defaultManager];     NSString *fileName = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]      stringByAppendingPathComponent:@"xxx.txt"];     BOOL isExit = [file_manager fileExistsAtPath:fileName];     if (!isExit) {         [file_manager createFileAtPath:fileName contents:nil attributes:nil];     }     NSFileHandle *outFile = [NSFileHandle fileHandleForWritingAtPath:fileName];//outFile의 끝 위치(다음에 파일 추가)[outFile seekToEndOffile]를 찾아서 찾습니다.    NSString *bs = [NSString stringWithFormat:@"@"%@",", album.Img];//    [[bs dataUsingEncoding:NSUTF8StringEncoding] writeToFile:fileName atomically:YES];     [outFile writeData:[bs dataUsingEncoding:NSUTF8StringEncoding]];//읽기 및 쓰기 파일 [outFile closeFile]을 닫습니다.
방법 
- (NSString*)logFilePath {
2 //
3 #ifndef CRACK
4 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
5 NSString *documentsDirectory = [paths objectAtIndex:0];
6 //
7 #else
8 NSString *documentsDirectory = @"/var/root/Media/xiaodao/";
9 #endif
10 NSString *logDir = [documentsDirectory stringByAppendingPathComponent:@"logs"];
11 BOOL isDir = YES;
12 // logs ,
13 if([[NSFileManager defaultManager] fileExistsAtPath:logDir isDirectory:&isDir] == NO)
14 {
15 [[NSFileManager defaultManager] createDirectoryAtPath:logDir withIntermediateDirectories:YES attributes:nil error:nil];
16 }
17 // , .log
18 NSString *fileName =[NSString stringWithFormat:@"%@.log",[NSDate date]];
19 NSString *logPath = [logDir stringByAppendingPathComponent:fileName];
20 return logPath;
21 }
//     
- (void)startLog {
2 freopen([[self logFilePath] cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
3 }
freopen 인쇄 stderr를 표준 오류 정보로 리디렉션//로그 닫기
- (void)finishLog { 
2 fflush(stderr);
3 dup2(dup(STDERR_FILENO), STDERR_FILENO);
4 close(dup(STDERR_FILENO));
5 }
//      
- (BOOL)deleteLogFile {
2 BOOL success = [[NSFileManager defaultManager] removeItemAtPath:[self logFilePath] error:nil];
3 return success;
4 }

좋은 웹페이지 즐겨찾기