#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