標籤:ima plist using 輸入資料流 man ascii 開啟檔案 輸出資料流 tde
一、日誌重新導向
我們在iOS開發過程中,我們時常會使用NSLog列印到控制台的日誌資訊進行代碼調試,但這樣調試的前提是串連上Xcode。
如果進行真機調試但同時又不能串連Xcode的時候,就不能直接在xcode的控制台查看輸出日誌了,但是程式還是會執行那些Log的,如果要查看這些日誌,我們就需要把輸出日誌資訊儲存到檔案中,然後進行查看。
標準NSLog的列印預設是往標準錯誤(stderr)進行列印的,我們只需要修改NSLog的列印輸出路徑即可實現日誌重新導向
以下是日誌重新導向代碼:
#pragma mark - 使用者方法,將NSLog的輸出資訊寫入到檔案中/* 將NSlog列印資訊儲存到Document目錄下的檔案中 */- (void)redirectLogToDocumentFolder{ // 擷取沙箱路徑 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString *documentDirectory = [paths objectAtIndex:0]; // 擷取列印輸出檔案路徑 NSString *fileName = [NSString stringWithFormat:@"myData.log"]; NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName]; // 先刪除已經存在的檔案 NSFileManager *defaultManager = [NSFileManager defaultManager]; [defaultManager removeItemAtPath:logFilePath error:nil]; // 將NSLog的輸出重新導向到檔案,因為C語言的printf列印是往stdout列印的,這裡也把它重新導向到檔案 freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stdout); freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stderr);}
在AppDelegate的application:didFinishLaunchingWithOptions:中調用:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ // 重新導向Log日誌資訊到Document檔案中 [self redirectLogToDocumentFolder]; return YES;}
到這裡還沒結束,因為你的Log日誌資訊已經列印到了真機應用的沙箱檔案中,你還需要把它拷貝到你的Mac上進行查看,你就需要設定共用檔案配置 :
在應用程式的Info.plist檔案中添加UIFileSharingEnabled鍵,並將索引值設定為YES。
一旦iOS裝置插入到使用者電腦,iTunes就會在選中裝置的Apps標籤中顯示一個檔案分享地區。設定了檔案分享權限設定後,使用者就可以向該目錄添加檔案或者將檔案移動到案頭電腦中。就是說,設定了檔案分享權限設定後,一旦裝置串連上電腦,可以通過iTune查看指定應用程式的共用資料夾,將檔案拷貝到你的電腦上看。
二、檔案流知識補充1. 開啟檔案
FILE *fp = fopen(檔案路徑,開啟檔案);
開啟檔案:
r : 讀,如果檔案不存在返回NULL,存在就開啟
w : 寫,如果檔案存在則覆蓋,不存在則建立
a : 追加,如果檔案存在則追加,不存在則建立
r+ : 在r的基礎上,多增加了寫的許可權
w+ : 在w的基礎上,多增加了讀的許可權
a+ : 在a的基礎上,多增加了讀的許可權
t : 文字檔(預設的),結合有rt、wt、at、rt+
b : 二進位檔案,結合有rb、wb、ab、rb+
2. 檔案操作
char ch = fgetc(檔案指標);
作用:從檔案中讀取一個字元
【fgetc和getc沒有區別,用法也一樣】
fputc(字元,檔案指標);
作用:寫入一個字元到檔案
fgets(字元數組,長度n,檔案指標);
作用:從檔案指標指向的檔案中讀取n-1個字元存到字元數組裡,會自動在後面加\0,字元數組用來儲存你讀取出來的字串
【遇到“\n”立即結束讀取】
fputs(字串,檔案指標);
作用:寫入一個字串到檔案指標指向的檔案
fread(儲存資料的首地址,每塊的大小,多少塊,檔案指標);
作用:從檔案指標指向的檔案中分塊讀取(檔案指標),告訴它一次讀取多少塊(多少塊),每塊多大(第二個參數),存到哪(第一個參數)
【它只關心具體讀的位元組數,不會關心這些自己裡面有沒有換行 】
fwrite(資料的首地址,每塊的大小,多少塊,檔案指標);
作用:將資料分塊寫入到檔案指標指向的檔案。第一個是告訴系統,寫入什麼資料,第二個是告訴系統每塊多少位元組,第三個是告訴系統分多少塊寫入,第四個是寫入到哪個檔案
fscanf(檔案指標,格式化控制符,地址清單);
作用:格式化讀取
fprintf(檔案指標,格式化控制符,參數列表);
作用:格式化寫入
freopen(檔案路徑path, 開啟檔案mode, 檔案指標fp);
作用:實現重新導向,把預定義的標準流檔案定向到由path指定的檔案中。標準流檔案具體是指stdin、stdout和stderr。其中stdin是標準輸入資料流,預設為鍵盤;stdout是標準輸出資料流,預設為螢幕;stderr是標準錯誤流,一般把螢幕設為預設。
3. 關閉檔案
fclose(檔案指標);
iOS學習筆記40-日誌重新導向