[SWIFT] Fügen Sie der Datei erweiterte Attribute hinzu

Einführung

Unter iOS können Sie den Wert abrufen, der dem Attributschlüssel FileAttributeKey für die Datei auf dem Gerät entspricht. Es enthält Informationen wie das Datum, an dem die Datei erstellt und geändert wurde, und die Größe der Datei. Der für FileAttributeKey definierte Wert kann über die von FileManager bereitgestellte Methode attributeOfItem (atPath :) abgerufen werden. Sie können jedoch auch eigene Attribute festlegen, um zusätzliche Informationen zu speichern / abzurufen. Als Beispiel für die Verwendungsszene werden beim lokalen Herunterladen der Datei in S3 die Informationen zur Aktualisierungszeit für die Datei LastModified angezeigt. Sie können sich beispielsweise vorstellen, einen Wert von htm zuzuweisen und ihn ab dem nächsten Mal für die synchrone Verwaltung von Dateien zu verwenden.

Implementierungsbeispiel

Der Einfachheit halber sind die Informationen, die im folgenden Code gespeichert werden sollen, "String". Ich denke, es ist in Ordnung, auf Typen abzuzielen, die "Codable" anstelle von "String" entsprechen.

extension URL {
  ///Erhalten Sie erweiterte Attribute
  func extendedAttribute(for name: String) -> String?  {
    let result = withUnsafeFileSystemRepresentation { fileSystemPath -> String? in
      //Ermitteln Sie die Größe der erweiterten Attributdaten, die dem Namen entsprechen
      let length = getxattr(fileSystemPath, name, nil, 0, 0, 0)
      guard length >= 0 else {
        return nil
      }
      //Sichern Sie einen Bereich zum Speichern von Daten
      var data = Data(count: length)
      let result = data.withUnsafeMutableBytes { [count = data.count] in
        //Daten für erweiterte Attribute abrufen, die dem Namen entsprechen
        getxattr(fileSystemPath, name, $0.baseAddress, count, 0, 0)
      }
      guard result >= 0 else {
        return nil
      }
      return String(data: data, encoding: .utf8)
    }
    return result
  }

  ///Speichern Sie erweiterte Attribute
  @discardableResult
  func setExtendedAttribute(value: String, for name: String) -> Bool {
    guard let data = value.data(using: .utf8) else {
      return false
    }
    let result = withUnsafeFileSystemRepresentation { fileSystemPath -> Bool in
      let result = data.withUnsafeBytes {
        //Speichern Sie erweiterte Attributdaten entsprechend dem Namen
        setxattr(fileSystemPath, name, $0.baseAddress, data.count, 0, 0)
      }
      return result >= 0
    }
    return result
  }
}

Überprüfen Sie den Betrieb

//Der Name des zu setzenden erweiterten Attributs
let key = "com.example.extended_attribute"
//Speicherort der Dateien zum Festlegen erweiterter Attribute
let url = FileManager.default.temporaryDirectory.appendingPathComponent("example_file")

//Wenn die Datei nicht vorhanden ist, erstellen Sie sie und fügen Sie erweiterte Attribute hinzu
if !FileManager.default.fileExists(atPath: url.path) {
  let data = "example_content".data(using: .utf8)!
  try! data.write(to: url)
  //Erweiterte Attribute gewähren
  url.setExtendedAttribute(value: "example_value", for: key)
}

//Überprüfen Sie, ob erweiterte Attribute erhalten werden können
print(url.extendedAttribute(for: key))

Konsolenausgabe

Optional("example_value")

Selbst wenn Sie die Anwendung neu starten, können Sie sehen, dass der durch "setExtendedAttribute" gespeicherte Wert abgerufen werden kann und der mit der Datei verknüpfte Wert beibehalten werden kann.

Referenz

Recommended Posts

Fügen Sie der Datei erweiterte Attribute hinzu
4 Fügen Sie dem Interpreter println hinzu
So fügen Sie die Löschfunktion hinzu
Fügen Sie dem JAR-Dateinamen in Gradle einen Zeitstempel hinzu
Migrationsdatei zum Hinzufügen eines Kommentars zur Rails-Tabelle
[Java] Verwendung der File-Klasse
So fügen Sie eine JAR-Datei in ScalaIDE hinzu
Ich wollte der Methode @VisibleForTesting hinzufügen
Versuchen Sie, die .erb-Datei in .slim zu ändern
[Rails 6] cocoon_ Fügen Sie dem hinzuzufügenden Formular ID- und Datenattribute hinzu
Fügen Sie JDK zum TeamCity Build Agent-Container hinzu
Doppelklicken Sie, um die JAR-Datei unter Windows zu öffnen
Klassenpfad hinzufügen: zu dem in spring.datasource.schema angegebenen Pfad
Fügen Sie die von Maven erhaltene JAR-Datei zu IntelliJ hinzu
[Spring Boot] So verweisen Sie auf die Eigenschaftendatei
Datei zur JAR-Datei hinzufügen
[Java] So extrahieren Sie den Dateinamen aus dem Pfad
JavaFX - Geben Sie den Speicherort der CSS-Datei relativ zur fxml-Datei an
So debuggen Sie die generierte JAR-Datei mit Eclipse
Löschen Sie die Migrationsdatei, die Sie nicht löschen konnten, vollständig
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Fügen Sie dem Header-Link mit Rails fontawesome ein Symbol hinzu
Hinzufügen von Elementen ohne Angabe der Länge des Arrays
So fügen Sie dieselben Indizes in ein verschachteltes Array ein
Fügen Sie dem Swift-Button (und auch dem Kreis) einen Schatten hinzu.
So ändern Sie den Inhalt der JAR-Datei, ohne sie zu dekomprimieren
Die Migrationsdatei wird dupliziert
9 Entspricht dem Rückgabewert
So fügen Sie die ActionText-Funktion hinzu
12 Entspricht der while-Anweisung
JavaDoc in Word-Datei ausgeben
[Spring Boot] Ich möchte meine eigene Eigenschaftendatei hinzufügen und den Wert mit env.getProperty () abrufen.
XML-Baum in Datei ausgeben
[Schienen] Spalte zum Entwickeln hinzufügen
[Rails] Löschen Sie die Migrationsdatei
Eingabe in die Java-Konsole
So erstellen Sie eine JAR-Datei und eine War-Datei mit dem Befehl jar
Es reagiert nicht auf die Beschreibung in .js der Packs-Datei
Korrigieren Sie den Namen der Kriegsdatei auf den in Maven festgelegten
[Eclipse] Ich möchte dieselbe Datei zweimal öffnen. [Split-Editor]
Methode, um die Anzahl der Jahre zu addieren und das Monatsende zu erhalten
Ich möchte die deaktivierte Option abhängig von der Bedingung zu f.radio_button hinzufügen
[JQuery] So zeigen Sie das ausgewählte Bild als sofortige Vorschau an + Fügen Sie ein Bildposting-Juwel hinzu
[chown] So ändern Sie den Eigentümer einer Datei oder eines Verzeichnisses
Ich habe ein Tool erstellt, um den Unterschied zwischen CSV-Dateien auszugeben
So ermitteln Sie die Länge einer Audiodatei mit Java