web-dev-qa-db-ja.com

iOS:ファイルの作成日をどのようにして見つけますか?

ファイルの作成日(変更日ではない)を見つけようとしています。

作成日はファイルの属性に表示されませんが、変更日は表示されます。

このコードを使用しています。

NSFileManager* fm = [NSFileManager defaultManager];

NSString* path = [PathHelpers pathInDocumentsFolderWithFilename:FILE_NAME];
NSDictionary* attrs = [fm attributesOfItemAtPath:path error:nil];

if (attrs != nil) {
    return (NSDate*)[attrs objectForKey: NSFileCreationDate];
} else {
    return nil;
}

これは常にnilを返します。デバッガーに「po attrs」と入力して、NSDictionaryのキー/値ペアのリストを取得すると、次の結果が返されます。

NSFileGroupOwnerAccountID = 20;
NSFileGroupOwnerAccountName = staff;
NSFileModificationDate = 2010-01-21 11:47:55 +0000;
NSFileOwnerAccountID = 501;
NSFileOwnerAccountName = ben;
NSFilePosixPermissions = 420;
NSFileReferenceCount = 1;
NSFileSize = 338;
NSFileSystemFileNumber = 2234;
NSFileSystemNumber = 42553324;
NSFileType = NSFileTypeRegular;

作成日はありません。

誰かが作成日を取得する別の方法を知っていますか、それともiOSには存在しませんか?

35
Ben Clayton

このコードは、実際には適切な作成日を私に返します。

NSFileManager* fm = [NSFileManager defaultManager];
NSDictionary* attrs = [fm attributesOfItemAtPath:path error:nil];

if (attrs != nil) {
    NSDate *date = (NSDate*)[attrs objectForKey: NSFileCreationDate];
    NSLog(@"Date Created: %@", [date description]);
} 
else {
    NSLog(@"Not found");
}

アプリ内でファイルを作成していますか?多分それが問題です。

68
Oriol Nieto

そのための特別なメッセージfileCreationDateNSDictionaryにあります。次は私のために働きます:

Objective-C:

NSDate *date = [attrs fileCreationDate];

Swift:

let attrs = try NSFileManager.defaultManager().attributesOfItemAtPath(path) as NSDictionary
attrs.fileCreationDate()
18
Ridcully

Swift 2.0バージョン:

do {
    let fileAttributes = try NSFileManager.defaultManager().attributesOfItemAtPath(YOURPATH)
    let creationDate = fileAttributes[NSFileCreationDate] as? NSDate
    let modificationDate = fileAttributes[NSFileModificationDate] as? NSDate
    print("creation date of file is", creationDate)
    print("modification date of file is", modificationDate)
}catch let error as NSError {
    print("file not found:", error)
}
8
Sam

Swift 4で、DocumentsDirectory内の特定のファイルのファイル作成日を知りたい場合は、このメソッドを使用できます

func getfileCreatedDate(theFile: String) -> Date {

        var theCreationDate = Date()
        do{
            let aFileAttributes = try FileManager.default.attributesOfItem(atPath: theFile) as [FileAttributeKey:Any]
            theCreationDate = aFileAttributes[FileAttributeKey.creationDate] as! Date

        } catch let theError as Error{
            print("file not found \(theError)")
        }
        return theCreationDate
    }
7
Naishta
  NSDate *creationDate = nil;
  if ([fileManager fileExistsAtPath:filePath]) {
       NSDictionary *attributes = [fileManager attributesOfItemAtPath:filePath error:nil];
       creationDate = attributes[NSFileCreationDate];
  }

その ここ

3
Govind

Swift 4の回答を更新して、変更された(.modifiedDate)または作成(.creationDate)日付:

let file: URL = ...
if let attributes = try? FileManager.default.attributesOfItem(atPath: file.path) as [FileAttributeKey: Any],
    let creationDate = attributes[FileAttributeKey.creationDate] as? Date {
    print(creationDate)
    }
  1. URLを介して事前に提供したファイルを使用して、その属性を要求します。成功すると、[FileAttributeKey:Any]のディクショナリが返されます
  2. ステップ1のディクショナリーを使用して、作成日(または必要に応じて変更)を引き出し、条件付きアンラップを使用して、成功した場合はそれを日付に割り当てます。
  3. 最初の2つのステップが成功したとすると、作業できる日付が得られます。
3
CodeBender

Swift 3バージョンコード:

do {
        let fileAttributes = try FileManager.default.attributesOfItem(atPath: yourPathString)
        let modificationDate = fileAttributes[FileAttributeKey.modificationDate] as! Date
        print("Modification date: ", modificationDate)
    } catch let error {
        print("Error getting file modification attribute date: \(error.localizedDescription)")
    }
2
mriaz0011

使える - fstat64 を取得するにはst_birthtimespec返された構造体のメンバー?ファイルのCファイルハンドルを作成し、timespec値をNSDateに変換する必要がありますが、何もしないよりはましです。

1
Jeff Kelley

Swift 5:

let date = (try? FileManager.default.attributesOfItem(atPath: path))?[.creationDate] as? Date
1
mishimay