Dateiattribute sind da, aber ich kann sie nicht auslesen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Dateiattribute sind da, aber ich kann sie nicht auslesen

      Tachchen,

      ich habe da ein kleines Problemchen mit dem Auslesen von Dateiattributen.

      Mit der Zeile

      Quellcode

      1. let fileAttr = try FileManager.default.attributesOfItem(atPath: path)

      hole ich mir die Dateiattribute ab. fileAttr ist dann auch gut gefüllt mit allem, was ich brauche.
      Aaaaaber: wenn ich dann versuche, auf die einzelnen Attribute zuzugreifen, dann kommt nix bei raus.

      Quellcode

      1. if let bytes = fileAttr[FileAttributeKey.size] as? Measurement<UnitInformationStorage>{
      2. newFile.size = Formatters.sizeFormatter.string(from: bytes)
      3. }
      Hier ist dann bytes leer. Auch der .type ist leer, wenn ich versuche, darauf zuzugreifen.


      Quellcode

      1. newFile.type = (fileAttr[FileAttributeKey.type] as! String)
      Hat jemand eine Idee, was da schief läuft? Oder muss ich, weil die Datei in einem iCloud-Verzeichnis liegt, das anders abfragen? Wäre mir dann aber neu.

      LG

      Mischa
    • mihema schrieb:

      Oder muss ich, weil die Datei in einem iCloud-Verzeichnis liegt, das anders abfragen?
      Also wenn Du diese Frage stellst, muss man zurückfragen, ob es bei einer lokalen Datei funktioniert?



      mihema schrieb:

      if let bytes = fileAttr[FileAttributeKey.size] as? Measurement<UnitInformationStorage>{
      Link Doku: developer.apple.com/documentat…attributekey/1416548-size

      Schon mal so probiert? if let size = fileAttr[.size] as? NSNumber { oder von woher hast Du, dass es Measurement<UnitInformationStorage> ist?
    • mihema schrieb:

      Oder muss ich, weil die Datei in einem iCloud-Verzeichnis liegt, das anders abfragen?
      Ergänzend zu @manohs Frage, ob es mit einer lokalen Datei funktioniert: Kann es sein, dass Du für iOS entwickelst und die iCloud-Datei vom System "evicted" bzw. noch gar nicht geladen wurde? Ich könnte mir vorstellen, dass der FileManager in's Leere läuft, weil nur eine Art Stub der Datei im lokalen iCloud-Ordner liegt...

      Ist aber geraten, Mattes
      Diese Seite bleibt aus technischen Gründen unbedruckt.
    • Schon mal Danke für die vielen Antworten und Rückfragen.

      Kurz zum Hintergrund:

      ich programmiere für macOS. Das Measurement<UnitInformationStorage> brauche ich für meinen Formatter, der das unbedingt will, sonst gibt es die Fehlermeldung "Cannot convert value of type 'NSNumber' to expected argument type 'Measurement<UnitInformationStorage>'"


      Quellcode

      1. static let sizeFormatter: ByteCountFormatter = {
      2. let formatter = ByteCountFormatter()
      3. formatter.allowedUnits = [.useKB]
      4. formatter.countStyle = .file
      5. return formatter
      6. }()
      Und wie gesagt: das Dictionary mit den Dateiattributen ist ja voll und da. Und die entsprechenden Werte sind auch richtig, also wird die Datei gefunden und die Werte ausgelesen.


      Quellcode

      1. ▿ 17 elements
      2. ▿ 0 : 2 elements
      3. ▿ key : NSFileAttributeKey
      4. - _rawValue : NSFileSize
      5. - value : 1239435
      6. [...]
      7. ▿ 15 : 2 elements
      8. ▿ key : NSFileAttributeKey
      9. - _rawValue : NSFileModificationDate
      10. - value : 2023-08-18 20:14:54 +0000
      11. [...]
      Alles anzeigen
      Allerdings komme ich an die Werte einfach nicht dran.
    • ja, ne. fileAttr[.size] ist schon richtig.

      nemecek.be/blog/22/how-to-get-…ng-filemanager-formatting

      Wenn ich den Wert als NSNumber oder Int64 auslese, ist da auch was drin.

      Aber wie bekomme ich das mit dem ByteCountFormatter zusammen? Ich möchte eigentlich keine eigene Methode schreiben, um die richtigen Werte anzuzeigen. Der verlangt halt leider keinen Int oder NSNumber, sondern dieses komische Ding da.