Получить атрибуты каждого элемента в каталоге документов iOS Swift

#ios #swift #nsdocumentdirectory #nsattributedescription

#iOS #swift #nsdocumentdirectory #nsattributedescription

Вопрос:

Я пытался получить атрибуты, такие как тип файла, дата создания, размер файла всех элементов в каталоге документов.

Вот код, который я использовал, но он возвращает мне просто «NSFileTypeDirectory«.

  let filemgr = FileManager.default
        
        
     do
     {
        let attribs: NSDictionary? = try filemgr.attributesOfItem(
            atPath: documentDirectoryPath!) as NSDictionary
        if let fileattribs = attribs
     {
            let type = fileattribs["NSFileType"] as! String
            print("File type (type)")
     }
     }
     catch
     {
            print(error)
     }
  

Я думаю, что он возвращает атрибуты папки документа.

Комментарии:

1. Это потому, что вы передаете путь к Documents Directory , а не к файлу внутри каталога документов . Вам нужно передать полный путь к файлу внутри каталога документов, для которого вы хотите получить атрибуты

2.Не связанный, но attributesOfItem(atPath возвращает необязательный, [FileAttributeKey : Any] не необязательный NSDictionary , и error переменная никогда не используется.

Ответ №1:

попробуйте это

 let fileManager = FileManager.default
let documentdirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first
let filePath = documentdirectory?.appendingPathComponent("your file name").path

do {
  let fileAttribute = try fileManager.attributesOfItem(atPath: filePath!)
  let fileSize = fileAttribute[FileAttributeKey.size] as! Int64
  let fileType = fileAttribute[FileAttributeKey.type] as! String
  let filecreationDate = fileAttribute[FileAttributeKey.creationDate] as! Date

} catch let error {
  print(error.localizedDescription)
  

Комментарии:

1. Очень полезно. Спасибо.

Ответ №2:

На основе кода @KarthikeyanBose: Чтобы получить информацию для всех файлов в каталоге Documents, выполните следующее:

 let fileManager = FileManager.default

if let documentsURLs = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first {
    do {
        let fileNames = try fileManager.contentsOfDirectory(atPath: documentsURLs.path)

        for fileName in fileNames {
            let fileURL = documentsURLs.appendingPathComponent(fileName)

            let fileAttribute = try fileManager.attributesOfItem(atPath: fileURL.path)
            let fileSize = fileAttribute[FileAttributeKey.size] as! Int64
            let fileType = fileAttribute[FileAttributeKey.type] as! String
            let filecreationDate = fileAttribute[FileAttributeKey.creationDate] as! Date
            let fileExtension = fileURL.pathExtension;

            print("Name: (fileName), Size: (fileSize), Type: (fileType), Date: (filecreationDate), Extension: (fileExtension)")
        }
    } catch {
        print("Error: (error)")
    }
} //Handle this "else" error too, even though this really shouldn't happen
  

Этот код выводит, например:

 Name: Deadpool.png, Size: 39225, Type: NSFileTypeRegular, Date: 2019-05-27 11:03:03  0000, Extension: png