ファイルのプロパティと操作

15839 ワード

アプリケーションの実行時に重要なデータをローカライズして保存する必要がある場合が多く、ディレクトリを作成する必要がある場合があります.Objective-Cは、非常に強力なディレクトリ作成インタフェースを提供します.- ( BOOL )createDirectoryAtPath:( NSString *)path withIntermediateDirectories:( BOOL )createIntermediates attributes:( NSDictionary *)attributes error:( NSError **)error;
多くの人がこのインタフェースを使用すると、attributesパラメータをnilに設定することが多く、ディレクトリを作成することができますが、iPhoneのappsなどの特殊なシーンで作成されたディレクトリの属性が望ましくないことが多く、ディレクトリの読み書きが失敗するなどの問題があります.実はattributesパラメータを設定することで、このインタフェースは私たちの期待を達成することができます.
アップルの公式ドキュメントによると、このパラメータは作成したディレクトリが属するユーザーとユーザーグループ、ディレクトリのアクセス権、変更時間などを設定することができます.nilに設定すると、作成したディレクトリのプロパティはシステムのデフォルト設定を採用し、一般的にディレクトリのユーザーをrootに設定し、アクセス権を0755に設定します.これにより、他のユーザーがこのディレクトリに書き込むのに失敗します.
attributesパラメータは辞書タイプです.アップルの公式ドキュメントの紹介を見ると、NSFileManager.hヘッダファイルは、attributes辞書のキーとして使用される定数文字列を多く定義し、このインタフェースに対するキーは主に以下のいくつかを含む.NSString * const NSFileType ; NSString * const NSFileSize ; NSString * const NSFileModificationDate ; NSString * const NSFileReferenceCount ; NSString * const NSFileDeviceIdentifier ; NSString * const NSFileOwnerAccountName ; NSString * const NSFileGroupOwnerAccountName ; NSString * const NSFilePosixPermissions ; NSString * const NSFileSystemNumber ; NSString * const NSFileSystemFileNumber ; NSString * const NSFileExtensionHidden ; NSString * const NSFileHFSCreatorCode ; NSString * const NSFileHFSTypeCode ; NSString * const NSFileImmutable ; NSString * const NSFileAppendOnly ; NSString * const NSFileCreationDate ; NSString * const NSFileOwnerAccountID ; NSString * const NSFileGroupOwnerAccountID ; NSString * const NSFileBusy ;
本文はアップルの公式ドキュメントを翻訳するつもりはなく、私たちが関心を持っているいくつかのキーの意味を以下に説明します.
  • NSFileAppendOnly

  • このキーの値は、作成したディレクトリが読み取り専用かどうかを示す、ブール値を表すNSNumberオブジェクトに設定する必要があります.
  • NSFileCreationDate

  • このキーの値は、ディレクトリの作成時間を示すNSDateオブジェクトに設定する必要があります.
  • NSFileOwnerAccountName

  • このキーの値は、このディレクトリの所有者の名前を表すNSStringオブジェクトに設定する必要があります.
  • NSFileGroupOwnerAccountName

  • このキーの値は、このディレクトリのユーザー・グループの名前を示すNSStringオブジェクトに設定する必要があります.
  • NSFileGroupOwnerAccountID

  • このキーの値は、unsigned intを表すNSNumberオブジェクトに設定し、ディレクトリのグループIDを表す必要があります.
  • NSFileModificationDate

  • このキーの値は、ディレクトリの変更時間を示すNSDateオブジェクトを設定する必要があります.
  • NSFileOwnerAccountID

  • このキーの値はunsigned intを表すNSNumberオブジェクトに設定し、ディレクトリの所有者IDを表す必要があります.
  • NSFilePosixPermissions

  • このキーの値はshort intを表すNSNumberオブジェクトに設定し、ディレクトリへのアクセス権を示す必要があります.
  • NSFileReferenceCount

  • このキーの値は、unsigned longを表すNSNumberオブジェクトに設定する必要があります.ディレクトリの参照数、すなわち、このディレクトリのハードリンク数を表します.
    これにより、attributes辞書の異なるキーの値を合理的に設計することで、このインタフェースで作成されたディレクトリの属性は基本的に私たちのニーズを満たします.
    一.NSFileManagerオブジェクトの作成
    NSFileManagerは簡単で、NSFileManagerオブジェクトを作成するためにフォーマットを適用できます.
    NSString* fileName=[[NSString alloc] initWithFormat:@"/ISO DeV/File.txt"]; NSFileManager *fileManager=nil; fileManager=[NSFileManager defaultManager];

     
    二.ファイルが存在するかどうかを判断する
    fileExistsAtPathを適用してファイルが存在するかどうかを判断し、上はすでに過ぎており、絶対パスを適用してもよいし、相対パスを適用してもよい
    if([fileManager fileExistsAtPath:fileName]==YES){ NSLog(@"     "); }else{ NSLog(@"      "); }

     
    三.ファイルのコピー
    関数copyPath:(NSString*)toPath(NSString*)を適用してファイルをコピーします.コピーファイルは最初からファイル名を付けることができます.
    NSString *toFileName=@"/ISO DeV/Test/File1.txt"; NSLog(@"%d",[fileManager fileExistsAtPath:toFileName]); [fileManager copyPath:fileName toPath:toFileName handler:nil]; if([fileManager fileExistsAtPath:toFileName]==YES){ NSLog(@"     "); }else{ NSLog(@"      "); }

     
    四.ファイルの内容が等しいかどうかを判断する
    if([fileManager contentsEqualAtPath:fileName andPath:toFileName]==YES){ NSLog(@"      "); }else{ NSLog(@"       "); }

     
    五.名前変更ファイル
    NSString *newFileName=@"/ISO DeV/Test/File2.txt"; [fileManager movePath:toFileName toPath:newFileName handler:nil];

     
    六.ファイルのプロパティの取得
    NSDictionary *dic= [fileManager fileAttributesAtPath:newFileName traverseLink:NO]; for (NSString *key in[dic keyEnumerator]) { NSLog(@"====== %@=%@",key,[dic valueForKey:key]); }

    アプリケーションメソッドfileAttributesAtPathは、あるパスの下のファイルのプロパティを取得し、戻り値はNSDictionaryである.以上のコード出力は以下のようになります.
    2014-05-02 23:24:23.993 PIOFile[537:303] ====== NSFileOwnerAccountID=501
    
    2014-05-02 23:24:23.993 PIOFile[537:303] ====== NSFileHFSTypeCode=0
    
    2014-05-02 23:24:23.993 PIOFile[537:303] ====== NSFileSystemFileNumber=18447915
    
    2014-05-02 23:24:23.994 PIOFile[537:303] ====== NSFileExtensionHidden=0
    
    2014-05-02 23:24:23.994 PIOFile[537:303] ====== NSFileSystemNumber=16777219
    
    2014-05-02 23:24:23.995 PIOFile[537:303] ====== NSFileSize=38
    
    2014-05-02 23:24:23.995 PIOFile[537:303] ====== NSFileGroupOwnerAccountID=0
    
    2014-05-02 23:24:23.995 PIOFile[537:303] ====== NSFileOwnerAccountName=hechen 2014-05-02 23:24:23.997 PIOFile[537:303] ====== NSFileCreationDate=2014-05-02 14:48:12 +0000
    
    2014-05-02 23:24:23.997 PIOFile[537:303] ====== NSFilePosixPermissions=420
    
    2014-05-02 23:24:23.997 PIOFile[537:303] ====== NSFileHFSCreatorCode=0
    
    2014-05-02 23:24:23.998 PIOFile[537:303] ====== NSFileType=NSFileTypeRegular 2014-05-02 23:24:23.998 PIOFile[537:303] ====== NSFileExtendedAttributes={ "com.apple.TextEncoding" = <7574662d 383b3133 34323137 393834>; } 2014-05-02 23:24:23.999 PIOFile[537:303] ====== NSFileGroupOwnerAccountName=wheel 2014-05-02 23:24:23.999 PIOFile[537:303] ====== NSFileReferenceCount=1
    
    2014-05-02 23:24:24.000 PIOFile[537:303] ====== NSFileModificationDate=2014-05-02 15:12:27 +0000

     
    七.ファイルの削除
    [fileManager removeFileAtPath:newFileName handler:nil];

    プロセスメソッドremoveFileAtPathでファイルを削除できます
     
    八.ファイルの内容の取得
    NSString *content=[NSString stringWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:nil]; NSLog(@"%@",content);