Dateien und Ordner

Zwar können das Verhalten und die Operationen größtenteils App-intern erfolgen, darunter auch einige begrenzte Speicherfunktionen. Die meisten Apps erfordern jedoch einen gewissen Zugriff auf Dateien auf dem jeweiligen Gerät. Ob Dateien erstellt werden, in Dateien geschrieben wird, bereits gespeicherte Fotos ausgewählt oder Dateien aus Online-Quellen heruntergeladen werden – alle Vorgänge erfordern einen gewissen Grad an Ordner- oder Dateiverwaltung. Das AppStudio-Framework umfasst mehrere Komponenten zur Erstellung und Organisation von Ordnern und Dateien sowie für die Navigation.

Ordnerverwaltung

Die AppFramework-Komponente FileFolder stellt Werkzeuge zum Bearbeiten, Erstellen und Löschen von Ordnern und Dateipfaden sowie für die Navigation bereit. Wenn eine App neue Dateien eines beliebigen Typs erstellt oder herunterlädt, kann die Verwendung von FileFolder entscheidend sein, damit die interne Dateistruktur der App geordnet und konsistent bleibt.

Mit diesem Codebeispiel wird ein neuer Ordner an einem festgelegten Speicherort erstellt. Dies ist optimal, wenn die App eine große Anzahl an Dateien erstellt, die gruppiert werden müssen.

let fileFolder = AppFramework.fileFolder("~/ArcGIS/Example App"); //Directs FileFolder towards a location within named user directory
let newFileFolder = fileFolder.folder("Bruce"); //Creates a folder object by the name Bruce
let result = newFileFolder.makeFolder(); //Creates folder at the location described by fileFolder.path

Standardmäßige Dateipfade

In Betriebssystemen sind spezifische Standardspeicherorte für bestimmte Dateitypen festgelegt. Die Komponente StandardPaths bietet eine Methode, um diese Speicherorte als Standardordnerpfad zu verwenden.

Mit diesem Codebeispiel wird ein Dateidialogfeld speziell für das Standardverzeichnis von Bildern geöffnet. Dabei wird die Enumeration standardLocations der Komponente StandardPaths verwendet, um die AppFramework-Funktion resolvedPathUrl anzugeben.

FileDialog {
    title: qsTr("Open Photo")
    folder: Qt.platform.os == "ios"
            ? "file:assets-library://"
            : AppFramework.standardPaths.defaultFolder(StandardPaths.PicturesLocation).url

    onAccepted: {
            imageObject.load(fileUrl);
    }
}

StandardPaths bietet zudem Methoden, mit denen bestimmt werden kann, ob in einen Ordner oder Speicherort geschrieben werden kann. Dies ist hilfreich, um eine App für das Schreiben in einen bestimmten Speicherort zu konfigurieren.

Erstellen und Schreiben in eine Datei

Die Komponente FileFolder ermöglicht nicht nur die Erstellung von Ordnern und die damit verbundene Navigation, sondern auch die Erstellung einfacher Text- und JSON-Dateien. Indem den onClicked-Ereignissen im obigen Beispiel für die Ordnererstellung die folgende Zeile hinzugefügt wird, wird innerhalb des Ordners eine Textdatei erstellt:

fileFolder.writeTextFile("TestFile.txt", "Contents of the file")

Mit FileFolder kann die Datei jedoch nur erstellt werden. Lese- oder Schreibvorgänge für die Datei sind mit dieser Komponente nicht möglich. Hierzu muss die Komponente File verwendet werden. Dies ist eine speziell für die Arbeit mit Textdateien konzipierte Komponente.

Dieses Codebeispiel stellt ein Textfeld dar, mit dem in die zuvor erstellte Textdatei geschrieben werden kann. Die Komponente FileInfo, die für die Rückgabe von Informationen zu einer Datei verwendet wird, wird in diesem Fall eingesetzt, um die Textdatei zuverlässig aufzufinden.

FileInfo {
    id: fileInfo
    filePath: "~/ArcGIS/Apps/SampleApp/TestFile.txt" //Instantiates FileInfo to locate the file
}

function saveText(text) {
    let fileFolder = fileInfo.folder;
    fileFolder.makeFolder();
    let file = AppFramework.file(fileInfo.filePath);
    file.open(File.OpenModeReadWrite)
    file.write(text);
    file.close();
}

Beachten Sie, dass es sich bei der Komponente File um einen einfachen Texteditor handelt. Das bedeutet, dass formatierter Text sowie Nichttextinhalt nicht ordnungsgemäß gelesen oder angezeigt werden. Sie können aber dennoch in die Datei eingegeben werden.