OC文件管理

oc文件操作

從文件裏讀內容,寫內容到文件裏,做得字典,fopen   fread   fwrite  fgets

1.對文件本身的操作(運行文件就能創建,移動,拷貝, 刪除文件)

    NSFileManger      //文件管理器


  NSFileManager * fm = [NSFileManager defaultManager];

        //用這個類方法創建filemanager,因爲這樣創建是單例(只有一個),每個程序只需要一個文件管理器。

  NSString * path = [[NSBundle mainBundle]pathForResource:@"map" ofType:@"txt"];

//查找某目錄下的目錄

  NSError * error;

  NSArray * array=[fm contentsOfDirectoryAtPath:PATH error:&error];

        if (error) {

           NSLog(@"%@",error);

       }

        //如果發生錯誤,該方法會創建一個NSError對象,將error指向NSError對象。錯誤的原因在description方法中。如果沒錯,該方法創建一堆字符串,是該目錄下所有文件及子目錄的名字。又創建一個數組裝這些字符串,返回數組地址。contents(內容)directory(目錄)

       int i;

       for (i=0; i<array.count; i++) {

           NSLog(@"%@",[array objectAtIndex:i]);

       }

        //淺度遍歷



//深度遍歷,不僅查看指定路勁下得文件和子目錄,而且查看子目錄下得內容,知道沒有子目錄。

   NSArray *array2=[fm subpathsOfDirectoryAtPath:PATH error:&error];

        if (error) {

            NSLog(@"%@",error);

        }

       // int i;

        NSLog(@"%@",array2);

//創建文件夾

   [fm createDirectoryAtPath:[NSString stringWithFormat:@"%@/Middle/dir",PATH] withIntermediateDirectories:YES attributes: nil error:&error];

        if (error) {

            NSLog(@"%@",error);

            exit(0);

        }

        //第二個參數表示中間目錄是否創建,如果填NO,則缺失中間目錄時,報錯,如果填YES,則自動創建中間目錄。

        //第三個參數表示文件屬性,通常填nil,表示默認屬性。



//創建文件

        NSString * str=@"節後綜合徵";

        NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];

        BOOL ret=[fm createFileAtPath:[NSString stringWithFormat:@"%@/file",PATH] contents:data attributes:nil]

        //data c中的buf,用來暫時存儲信息。NSLog@“%S”,(char *data.bytes);

        //第二個參數此傲視文件內容,如果問價你創建時,不想寫入內容,傳nil,它的類型是NSdata

        //nsdata是緩存類,用來將數據寫入文件,或從文件獲取數據,任何類的對象都能轉成NSDATA,只不過要使用協議

        //字符串轉成NSDate,需要轉成編碼格式,UTF8mac下得默認格式編碼,對中文支持很好。

        if (!ret) {

            NSLog(@"文件創建失敗");

            exit(0);

        }




//刪除文件或者目錄

        [fm removeItemAtPath:[NSString stringWithFormat:@"%@/Middle",PATH] error:&error];

        if (error) {

            NSLog(@"%@",error);

            exit(0);

        }



//文件複製



#define PATH @"/Users/qianfeng/desktop/1314/8.4-oc文件操作/file"

#define DST_PATH @"/Users/qianfeng/desktop/1314/8.4-oc文件操作/dir/file"

int main(int argc, const char * argv[])

{


    @autoreleasepool {

        

        NSFileManager * fm = [NSFileManager defaultManager];

        NSError * error=nil;

        [fm copyItemAtPath:PATH toPath:DST_PATH error:&error];

        if(error)

        {

            NSLog(@"%@",error);

            exit(0);

        }



//文件剪切(remove  文件刪除)

   [fm moveItemAtPath:PATH toPath:DST_PATH error:&error];

        if(error)

            {

                       NSLog(@"%@",error);

                       exit(0);

            }



//獲得文件屬性


NSDictionary * dict = [fm attributesOfItemAtPath:PATH error:&error];

//獲得當前工程下得文件路徑

        NSString * path = [[NSBundle mainBundle]pathForResource:@"字典" ofType:@"txt"];


2.對文件內容的操作

  NSFileHandle      //文件句柄

//讀到句尾

NSFileHandle * fh = [NSFileHandle fileHandleForReadingAtPath:PATH];

        //以只讀方式打開文件,生成文件句柄。從句柄裏讀,就是從文件裏讀。

      NSData * data=[fh readDataToEndOfFile];

        //讀到文件尾

        NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

        //data轉換成string類型

        NSLog(@"%@",str);


//讀指定長度

 NSData *data2=[fh readDataOfLength:6];

        NSString *str2=[[NSString alloc]initWithData:data2 encoding:NSUTF8StringEncoding];

        NSLog(@"%@",str2);

        data2=[fh readDataOfLength:6];

        NSString *str3 =[[NSString alloc]initWithData:data2 encoding:NSUTF8StringEncoding];

        NSLog(@"%@",str3);

第二次讀取會接着第一次後面讀。


//


[fh writeData:[@"花心大蘿蔔"dataUsingEncoding:NSUTF8StringEncoding]];

        //從第一個字節開始覆蓋。

如果要清空原文件

[fh truncateFileAtOffset:0];

        //階段至0字節。

[fh seekToEndofFile];

//將讀寫指針,至於文件尾

同一次打開文件,讀,接着讀,寫,接着寫!


        NSFileHandle * fh = [NSFileHandle fileHandleForWritingAtPath:PATH];

        //以只寫方式打開文件,生成文件句柄

        [fh truncateFileAtOffset:0];

        //階段至0字節。

        [fh seekToEndOfFile];

        //將讀寫指針至於文件尾。

        [fh writeData:[@"花心大蘿蔔"dataUsingEncoding:NSUTF8StringEncoding]];

        //從第一個字節開始覆蓋。

        [fh writeData:[@"花心大蘿蔔"dataUsingEncoding:NSUTF8StringEncoding]];




iphone沙箱模型的有四個文件夾,分別是什麼,永久數據存儲一般放在什麼位置,得到模擬器的路徑的簡單方式是什麼.

documentstmpappLibrary

NSHomeDirectory()),

手動保存的文件在documents文件裏

Nsuserdefaults保存的文件在tmp文件夾裏


1Documents 目錄:您應該將所有de應用程序數據文件寫入到這個目錄下。這個目錄用於存儲用戶數據或其它應該定期備份息。

2AppName.app 目錄:這是應用程序程序包目錄,包含應用程序身。由於應用程序必須經過簽名,所以您在運行時不能對這個目錄中內容進行修改,否則可能會使應用程序無法啓動。

3Library 目錄:這個目錄下有兩個子目錄:Caches Preferences
Preferences 目錄:包含應用程序偏好設置文件。您不應該直接創建偏好設置文件,而是應該使用NSUserDefaults類來取得和設置應用程序偏好.
Caches 目錄:用於存放應用程序專用支持文件,保存應用程序再次啓動過程中需要信息。

4tmp 目錄:這個目錄用於存放臨時文件,保存應用程序再次啓動過程中不需要信息。


獲取這些目錄路徑方法:
1,獲取家目錄路徑函數:
NSString *homeDir = NSHomeDirectory();
2,獲取Documents目錄路徑方法:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
3,獲取Caches目錄路徑方法:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:0];
4,獲取tmp目錄路徑方法:
NSString *tmpDir = NSTemporaryDirectory();
5,獲取應用程序程序包中資源文件路徑方法:
例如獲取程序包中一個圖片資源(apple.png)路徑方法:
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@”apple” ofType:@”png”];
UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];
代碼中mainBundle類方法用於返回一個代表應用程序包對象。

iphone沙盒(sandbox)中的幾個目錄獲取方式:

[cpp] view plaincopy



  1. // 獲取沙盒主目錄路徑  
  2. NSString *homeDir = NSHomeDirectory();  
  3. // 獲取Documents目錄路徑  
  4. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  5. NSString *docDir = [paths objectAtIndex:0];  
  6. // 獲取Caches目錄路徑  
  7. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);  
  8. NSString *cachesDir = [paths objectAtIndex:0];  
  9. // 獲取tmp目錄路徑  
  10. NSString *tmpDir =  NSTemporaryDirectory();  

[cpp] view plaincopy



  1. // 獲取當前程序包中一個圖片資源(apple.png)路徑  
  2. NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"apple" ofType:@"png"];  
  3. UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];  

例子:

NSFileManager* fm=[NSFileManager defaultManager];
if(![fm fileExistsAtPath:[self dataFilePath]]){

//下面是對該文件進行制定路徑保存
[fm createDirectoryAtPath:[self dataFilePath] withIntermediateDirectories:YES attributes:nil error:nil];

//取得一個目錄下得所有文件名
NSArray *files = [fm subpathsAtPath: [self dataFilePath] ];

//讀取某個文件
NSData *data = [fm contentsAtPath:[self dataFilePath]];

//或者
NSData *data = [NSData dataWithContentOfPath:[self dataFilePath]];
}



1、其中得 app root 可以用 NSHomeDirectory() 訪問到;
2Documents 目錄就是我們可以用來寫入並保存文件得地方,一般可通過:
    1.    de style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left:   
    2.    0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
    3.    NSArray *paths = NSSearchPa
    4.    thForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);  
    5.     
    6.    de>
    7.    de style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;   
    8.    margin-top: 0px; margin-right: 0px; margin-bottom:   
    9.    0px; margin-left: 0px; ">NSString *documentsDirectory = [paths objectAtIndex:0];  
    10.    de>
得到。
3tmp 目錄我們可以在裏面寫入一些程序運行時需要用得數據,裏面寫入得數據在程序退出後會沒有。可以通過
    1.    NSString *NSTemporaryDirectory(void); 
方法得到;
4、文件一些主要操作可以通過NSFileManage 來操作,可以通過 [NSFileManger defaultManger] 得到它得實例。
相關得一些操作:
創建一個目錄:比如要在Documents下面創建一個test目錄,
    1.    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    2.    NSString *documentsDirectory = [paths objectAtIndex:0];  
    3.    NSLog(@”%@”,documentsDirectory);  
    4.    NSFileManager *fileManage = [NSFileManager defaultManager];  
    5.    NSString *myDirectory = [documentsDirectory stringByAppendingPathComponent:@“test”];  
    6.    BOOL ok = [fileManage createDirectoryAtPath:myDirectory attributes:nil];
取得一個目錄下得所有文件名:(如上面的myDirectory)可用
    1.    NSArray *file = [fileManager subpathsOfDirectoryAtPath: myDirectory error:nil];

    1.    NSArray *files = [fileManager subpathsAtPath: myDirectory ];
讀取某個文件:
    1.    NSData *data = [fileManger contentsAtPath:myFilePath];//myFilePath
是包含完整路徑的文件名
或直接用NSData 的類方法:
    1.    NSData *data = [NSData dataWithContentOfPath:myFilePath];
保存某個文件:
可以用 NSFileManager
    1.    - (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;
NSData
    1.    - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;  
    2.    - (BOOL)writeToFile:(NSString *)path options:(NSUInteger)writeOptionsMask error:(NSError **)errorPtr;
小結:詳解iPhone開發中文件讀寫教程的內容介紹完了,希望通過本文的學習能對你有所幫助!

iPhone文件系統NSFileManager講解是本文要介紹的內容,主要是通過iphone文件系統來學習NSFileManager的使用方法,具體內容來看本文詳解。
iPhone文件系統:創建、重命名以及刪除文件,NSFileManager中包含了用來查詢單詞庫目錄、創建、重命名、刪除目錄以及獲取/設置文件屬性的方法(可讀性,可編寫性等等)。
每個程序都會有它自己的沙盒,通過它你可以閱讀/編寫文件。寫入沙盒的文件在程序的進程中將會保持穩定,即便實在程序更新的情況下。
如下所示,你可以在沙盒中定位文件目錄:
    1.    //對於錯誤信息  
    2.    NSError *error;  
    3.    // 創建文件管理器  
    4.    NSFileManager *fileMgr = [NSFileManagerdefaultManager];  
    5.    //指向文件目錄  
    6.    NSString *documentsDirectory= [NSHomeDirectory()   
    7.    stringByAppendingPathComponent:@"Documents"];  
    8.     
    9.    //創建一個目錄  
    10.    [[NSFileManager defaultManager]   createDirectoryAtPath: [NSString stringWithFormat:@"%@/myFolder", NSHomeDirectory()] attributes:nil];
創建一個文件
現在我們已經有了文件目錄,我們就能使用這個路徑在沙盒中創建一個新文件並編寫一段代碼:
    1.    // File we want to create in the documents directory我們想要創建的文件將會出現在文件目錄中  
    2.    // Result is: /Documents/file1.txt結果爲:/Documents/file1.txt  
    3.    NSString *filePath= [documentsDirectory  
    4.    stringByAppendingPathComponent:@"file1.txt"];  
    5.    //需要寫入的字符串  
    6.    NSString *str= @"iPhoneDeveloper Tips\nhttp://iPhoneDevelopTips,com";  
    7.    //寫入文件  
    8.    [str writeToFile:filePath atomically:YES   
    9.    encoding:NSUTF8StringEncoding error:&error];  
    10.    //顯示文件目錄的內容  
    11.    NSLog(@"Documentsdirectory: %@",  
    12.    [fileMgr contentsOfDirectoryAtPath:documentsDirectoryerror:&error]);
我們爲想要創建的文件構建一條路徑(file1.txt),初始化一個字符串來寫入文件,並列出目錄。最後一行顯示了在我們創建文件之後出現在文件目錄下的一個目錄列表:
對一個文件重命名
想要重命名一個文件,我們需要把文件移到一個新的路徑下。下面的代碼創建了我們所期望的目標文件的路徑,然後請求移動文件以及在移動之後顯示文件目錄。
    1.    //通過移動該文件對文件重命名  
    2.    NSString *filePath2= [documentsDirectory  
    3.    stringByAppendingPathComponent:@"file2.txt"];  
    4.    //判斷是否移動  
    5.    if ([fileMgr moveItemAtPath:filePath toPath:filePath2 error:&error] != YES)  
    6.    NSLog(@"Unable to move file: %@", [error localizedDescription]);  
    7.    //顯示文件目錄的內容  
    8.    NSLog(@"Documentsdirectory: %@",   
    9.    [fileMgr contentsOfDirectoryAtPath:documentsDirectoryerror:&error]);
在移動了文件之後,輸出結果應該如下圖所示:
刪除一個文件
爲了使這個技巧完整,讓我們再一起看下如何刪除一個文件:
    1.    //filePath2中判斷是否刪除這個文件  
    2.    if ([fileMgr removeItemAtPath:filePath2 error:&error] != YES)  
    3.    NSLog(@"Unable to delete file: %@", [error localizedDescription]);  
    4.    //顯示文件目錄的內容  
    5.    NSLog(@"Documentsdirectory: %@",  
    6.    [fileMgr contentsOfDirectoryAtPath:documentsDirectoryerror:&error]);
一旦文件被刪除了,正如你所預料的那樣,文件目錄就會被自動清空:
這些示例能教你的,僅僅只是文件處理上的一些皮毛。想要獲得更全面、詳細的講解,你就需要掌握NSFileManager文件的知識。
在開發iPhone程序時,有時候要對文件進行一些操作。而獲取某一個目錄中的所有文件列表,是基本操作之一。通過下面這段代碼,就可以獲取一個目錄內的文件及文件夾列表。
    1.    NSFileManager *fileManager = [NSFileManager defaultManager];  
    2.    //在這裏獲取應用程序Documents文件夾裏的文件及文件夾列表  
    3.            NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    4.            NSString *documentDir = [documentPaths objectAtIndex:0];  
    5.            NSError *error = nil;  
    6.            NSArray *fileList = [[NSArray alloc] init];  
    7.    //fileList便是包含有該文件夾下所有文件的文件名及文件夾名的數組  
    8.            fileList = [fileManager contentsOfDirectoryAtPath:documentDir error:&error];
以下這段代碼則可以列出給定一個文件夾裏的所有子文件夾名
    1.    NSMutableArray *dirArray = [[NSMutableArray alloc] init];  
    2.            BOOL isDir = NO;  
    3.    //在上面那段程序中獲得的fileList中列出文件夾名  
    4.            for (NSString *file in fileList) {  
    5.                    NSString *path = [documentDir stringByAppendingPathComponent:file];  
    6.                    [fileManager fileExistsAtPath:path isDirectory:(&isDir)];  
    7.                    if (isDir) {  
    8.                            [dirArray addObject:file];  
    9.                    }  
    10.                    isDir = NO;  
    11.            }  
    12.            NSLog(@"Every Thing in the dir:%@",fileList);  
    13.            NSLog(@"All folders:%@",dirArray); 






+ (NSString *)pathWithComponents(NSArray *)components 

根據components中的元素來構建路徑

- (NSArray *)pathComponents 

解析路徑,返回構成路徑的各個部分

- (NSString *)lastPathComponent 

提取路徑中的最後一個組成部分 

- (NSString *)pathExtension 

從路徑中最後一個組成部分中提取擴展名 

- (NSString *)stringByAppendingPathComponent(NSString *)path 

path添加到現有路徑末尾 

- (NSString *)stringByAppendingPathExtension(NSString *)ext 

將指定的擴展名添加到現有路徑的最後一個組成部分上 

- (NSString *)stringByDeletingLastPathComponent 

刪除路徑中的最後一個組成部分 

- (NSString *)stringByDeletingPathExtension 

從文件的最後一部分刪除擴展名 

- (NSString *)stringByExpandingTildeInPath 

將路徑中的代字符擴展成用戶主目錄(~)或指定用戶的主目錄(~user) 

- (NSString *)stringByResolvingSymlinksInPath 

嘗試解析路徑中的符號鏈接 

- (NSString *)stringByStandardizingPath 

解析路徑中的~,(..)父目錄,(.)當前目錄和符號鏈接來標準化路徑


常用的NSProcessInfo(進程相關

+ (NSProcessInfo *)processInfo 

返回當前進程信息 

- (NSArray *)arguments 

NSString對象數字的形式返回當前進程的參數 

- (NSDictionary *)environment 

返回變量/值對字典,以描述當前的環境變量(比如PATH等等

- (int)processIdentifier 

返回進程PID 

- (NSString *)processName 

返回當前正在執行的進程名稱 

- (NSString *)globallyUniqueString 

每次調用該方法時,都會返回不同的單值字符串,可以生成臨時文件名 

- (NSString *)hostName 

返回主機系統名 

-(NSUInteger)operatingSystem 

返回表示操作系統的數字 

- (NSString *)operatingSystemName 

返回操作系統的名稱 

- (NSString *)operatingSystemVersionString 

返回操作系統版本 

- (void)setProcessNameNSString *)name 

修改當前進程名(謹慎使用


基本文件操作類: NSFileHandle 

NSFileHandle類沒有提供創建文件的方法,所以要創建文件需要使用FileManager方法來創建, NSFileHandle類中的文件操作方法都是假定文件都是存在的,如果不存在,則返回nil. 

常用的NSFileHandle方法: 

+ (id)fileHandleForReadingAtPathNSString *)path 

打開一個文件準備讀取 

+ (id)fileHandleForWritingAtPathNSString *)path 

打開一個文件準備寫入 

+ (id)fileHandleForUpdatingAtPathNSString *)path 

打開一個文件準備更新(讀取和寫入

- (NSData *)availableData 

從設備或者通道返回可用的數據 

- (NSData *)readDataToEndOfFile 

讀取其餘的數據直到文件的末尾(最大值爲無符號整形的最大值

- (NSData *)readDataOfLengthNSUInteger)length 

從文件讀取指定字節數的內容 

- (void)writeDataNSData *)data 

data寫入文件 

- (unsigned long long)offsetInFile 

獲取當前文件的偏移量 

- (void)seekToFileOffsetunsigned long long)offset 

設置當前文件的偏移量 

- (unsigned long long)seekToEndOfFile 

將當前文件的偏移量定位到文件的末尾 

- (void)truncateFileAtOffset:(unsigned long long)offset 

將文件的長度設置爲offset字節(如需要,可填充內容

- (void)closeFile 

關閉文件 

-(bool) fileHandleForReadingAtPath 

文件是否可讀 

-(void) fileHandleForWritingAtPath 

文件是否可寫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章