ファイルとフォルダー

アプリの振舞いや操作の多くは (限定的な格納機能を含めて) アプリ自体の中で実行できますが、ほとんどのアプリはデバイス上のファイルにある程度アクセスする必要があります。 ファイルの作成と書き込み、すでに保存されている写真の選択、およびオンライン ソースからのファイルのダウンロードには、すべてある程度のファイルまたはフォルダー管理が必要です。 AppStudio Framework には、フォルダーとファイルを作成、整理、操作するためのコンポーネントが複数あります。

フォルダー管理

AppFramework の FileFolder コンポーネントは、フォルダーとファイル パスを操作、ナビゲーション、作成、削除するツールを提供します。 アプリが任意のタイプの新しいファイルを作成またはダウンロードしている場合、アプリの内部ファイル構造の規則性と整合性を維持するために、FileFolder を使用することは重要です。

次のサンプル コードは、設定された場所に新しいフォルダーを作成します。これは、アプリが多数のファイルを作成してグループ化する必要がある場合に最適です。

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

標準のファイル パス

オペレーティング システムには、特定タイプのファイルを保存する特定の標準の場所があります。 StandardPaths コンポーネントは、これらの場所をデフォルトのフォルダー パスとして使用する方法を提供します。

次のサンプル コードは、StandardPaths コンポーネントの standardLocations enum を使用して AppFramework resolvedPathUrl 関数に通知して、ファイル ダイアログで写真のデフォルトの場所を限定的に開きます。

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

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

また、StandardPaths には、フォルダーまたは場所に書き込めるかどうかを判定するメソッドもあります。これは、適切な場所に書き込むようにアプリを構成する際に役に立ちます。

ファイルの作成とファイルへの書き込み

FileFolder コンポーネントは、フォルダーの作成とナビゲーションのほかにも、単純なテキストや JSON ファイルの作成にも使用できます。 上記のフォルダー作成のサンプルで、onClicked イベントに次の行を追加すると、フォルダー内にテキスト ファイルが作成されます。

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

ただし、FileFolder は最初にファイルを作成できるだけで、作成後の読み書きはできません。 これを行うには、File コンポーネントを使用する必要があります。これは、このようにテキスト ファイルを操作するために専用に使用されるコンポーネントです。

次のサンプル コードは、前に作成されたテキスト ファイルに書き込むために使用できるテキスト フィールドを提供します。 FileInfo コンポーネントは、ファイルに関する情報を返すために使用されますが、この場合はテキスト ファイルを確実に特定するために使用されます。

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();
}

File コンポーネントは、プレーン テキスト エディターであることに注意してください。 つまり、テキスト以外のコンテンツや書式設定されたテキストの読み取りと表示は正しく実行されません。 ただし、これらをファイルに書き込むことは可能です。