日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NSFileHandle

發布時間:2023/12/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NSFileHandle 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用 ?文件操作柄,也就是 ?NSFileHandle這類物件,我們 ?可以更加近距離地 ?操作 ?文件。一般來說,操作 ?文件 ?需要 ?下面三個步驟:

  • 打開 ?文件,為 ?這個文件 ?創建 ?文件操作柄;
  • 進行 ?輸入/輸出操作;
  • 關閉 ?文件。
  • 下面的表格 ?總結了 ?可以對文件操作柄所采取的措施:

    措施名稱 描述
    +(NSFileHandle *)fileHandleForReadingAtPath:path 打開文件以便讀取
    +(NSFileHandle *)fileHandleForWritingAtPath:path 打開文件以便寫入
    +(NSFileHandle *)fileHandleForUpdatingAtPath:path 打開文件以便讀寫
    -(NSData *)availableData 產生的結果為其實施對象中可用的數據
    -(NSData *)readDataToEndOfFile 讀取文件末尾處之前的數據
    -(NSData *)readDataOfLength:(NSUInteger)bytes 讀取長度為bytes字節的數據
    -(void)writeData:data 將數據data寫入文件
    -(unsigned long long)offsetInFile 獲取當前文件中的操作位置
    -(void)seekToFileOffset:offset 將當前文件的操作位置設定為offset
    -(unsigned long long)seekToEndOfFile 將當前文件的操作位置設定為文件的末尾處
    -(void)truncateFileAtOffset:offset 將文件的長度設定為offset
    -(void)closeFile 關閉文件

    你 ?應該注意:利用 ?文件操作柄 ?并不能創建 ?文件。創建 ?文件 ?只能利用 ?文件管理器,也就是 ?NSFileManager這類物件。所以 ?向 ?NSFileHandle這類物件 ?發送 ?fileHandleForWritingAtPath: ?和 ?fileHandleForUpdatingAtPath:這兩條消息的前提 ?是 ?文件 ?必須存在,如果 ?文件 ?并不存在,那么 ?NSFileHandle這類物件 ?就會產生出 ?空值nil。在這兩種情況之下,文件的操作位置 ?都被設定 ?在文件的開頭處。另外 ?如果 ?你 ?習慣于 ?在UNIX之下編程,你 ?應該注意到 ?打開文件 ?并不能 ?將 ?這個文件 ?剪短。你 ?得自己 ?將 ?文件 ?剪短。

    下面的程序 ?示范了 ?如何利用 ?文件操作柄 ?來操作 ?文件:

    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081#import <Foundation/NSObject.h>#import <Foundation/NSString.h>#import <Foundation/NSFileHandle.h>#import <Foundation/NSFileManager.h>#import <Foundation/NSAutoreleasePool.h>#import <Foundation/NSData.h>int main(int argc,const char *argv[]){????NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];????NSFileHandle *inFile,*outFile;????NSData *buffer;????//為文件testfile創建文件操作柄,以便讀取數據????inFile=[NSFileHandle fileHandleForReadingAtPath:@"testfile"];????if(inFile==nil)????{????????NSLog(@"打開文件失敗!");????????return 1;????}????//創建文件testfile2????[[NSFileManager defaultManager] createFileAtPath:@"testfile2" contents:nil attributes:nil];????//為文件testfile2創建文件操作柄,以便寫入數據????outFile=[NSFileHandle fileHandleForWritingAtPath:@"testfile2"];????if(outFile==nil)????{????????NSLog(@"打開文件失敗!");????????return 2;????}????//將文件testfile2的長度剪短為0????????[outFile truncateFileAtOffset:0];????//將文件testfile中的數據讀取到緩沖區buffer當中????buffer=[inFile readDataToEndOfFile];????//將緩沖區buffer中的數據寫入到文件testfile2當中????[outFile writeData:buffer];????//將兩個文件關閉????[inFile closeFile];????[outFile closeFile];????//將testfile2的內容顯示出來,用以驗證之前的操作是否成功????NSLog(@"%@",[NSString stringWithContentsOfFile:@"testfile2" encoding:NSUTF8StringEncoding error:nil]);????[pool drain];????return 0;}

    運行 ?這個程序過后,可以得到 ?這樣的結果:

    1 2 2012-05-18 15:51:06.184 Sample[1507:707] 編程很有趣! Program ended with exit code: 0

    readDataToEndOfFile:這項措施 ?可以讀取 ?長達1099511627542字節的數據。這 ?對于你所編寫的任何程序來說 ?都足夠大了。你 ?可以設定 ?一個循環 ?利用 ?緩沖區 ?在文件之間 ?傳輸 ?數據,這個 ?可以通過readDataOfLength:這項措施 ?辦到。緩沖區的大小 ?可以是 ?8192字節 ?或者 ?131072字節,因為 ?底層的操作系統 ?一般 ?以這種大小的數據塊 ?執行 ?輸入/輸出操作。

    如果 ?一項措施 ?直到文件末尾處 ?都沒有讀取到 ?任何數據,那么 ?這項措施 ?會產生出 ?一個空的NSData類型的物件。你 ?可以對 ?這個NSData類型的物件 ?采取 ?length這項措施 ?從而 ?檢查 ?是否 ?從文件中 ?讀取到 ?任何數據。

    如果 ?你 ?打開 ?一個文件 ?進行 ?讀、寫,那么 ?文件的操作位置 ?會被設定 ?在文件的開頭處。你 ?可以將 ?文件操作位置 ?設定為 ?其它位置,再 ?進行 ?讀、寫操作,比如 ?將 ?文件的操作位置 ?設定 ?在第10個字節處,就可以這樣:

    1[myFileHandle seekToFileOffset:10];

    先獲取 ?當前的文件操作位置,然后再 ?對 ?這個文件操作位置 ?加上 ?或者 ?減去 ?一定的字節數,我們 ?就可以得到 ?一個相對的文件操作位置。比如,在當前文件操作位置的基礎上 ?向前 ?跳過 ?128字節,可以這樣:

    1 [myFileHandleseekToFileOffset:[myFileHandleoffsetInFile]+128];

    如果 ?要將 ?當前文件操作位置 ?向回 ?移動 ?5個整數值的長度,那么 ?我們 ?可以利用 ?這樣的語句:

    1 [myFileHandleseekToFileOffset:[myFileHandleoffsetInFile]-5*sizeof(int)];

    總結

    以上是生活随笔為你收集整理的NSFileHandle的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。