iOS學習筆記40-日誌重新導向

來源:互聯網
上載者:User

標籤: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);}

AppDelegateapplication: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. 檔案操作
  1. char ch = fgetc(檔案指標);
    作用:從檔案中讀取一個字元
    【fgetc和getc沒有區別,用法也一樣】
  2. fputc(字元,檔案指標);
    作用:寫入一個字元到檔案
  3. fgets(字元數組,長度n,檔案指標);
    作用:從檔案指標指向的檔案中讀取n-1個字元存到字元數組裡,會自動在後面加\0,字元數組用來儲存你讀取出來的字串
    【遇到“\n”立即結束讀取】
  4. fputs(字串,檔案指標);
    作用:寫入一個字串到檔案指標指向的檔案
  5. fread(儲存資料的首地址,每塊的大小,多少塊,檔案指標);
    作用:從檔案指標指向的檔案中分塊讀取(檔案指標),告訴它一次讀取多少塊(多少塊),每塊多大(第二個參數),存到哪(第一個參數)
    【它只關心具體讀的位元組數,不會關心這些自己裡面有沒有換行 】
  6. fwrite(資料的首地址,每塊的大小,多少塊,檔案指標);
    作用:將資料分塊寫入到檔案指標指向的檔案。第一個是告訴系統,寫入什麼資料,第二個是告訴系統每塊多少位元組,第三個是告訴系統分多少塊寫入,第四個是寫入到哪個檔案
  7. fscanf(檔案指標,格式化控制符,地址清單);
    作用:格式化讀取
  8. fprintf(檔案指標,格式化控制符,參數列表);
    作用:格式化寫入
  9. freopen(檔案路徑path, 開啟檔案mode, 檔案指標fp);
    作用:實現重新導向,把預定義的標準流檔案定向到由path指定的檔案中。標準流檔案具體是指stdinstdoutstderr。其中stdin是標準輸入資料流,預設為鍵盤;stdout是標準輸出資料流,預設為螢幕;stderr是標準錯誤流,一般把螢幕設為預設。
3. 關閉檔案

fclose(檔案指標);

iOS學習筆記40-日誌重新導向

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.