파일 및 폴더

제한적인 몇 가지 저장 기능을 비롯한 앱의 대다수 동작과 작업은 앱 자체 내에서 수행할 수 있지만, 대부분의 앱에는 기기의 파일에 대한 일정 수준의 접근 권한이 필요합니다. 파일 생성/파일에 쓰기, 이미 저장한 사진 선택, 온라인 원본에서 파일 다운로드 등의 작업을 수행하려면 파일 또는 폴더 관리를 어느 정도 수행해야 합니다. 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 열거형을 사용해 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 컴포넌트를 사용하면 TXT 파일을 안정적으로 찾을 수 있습니다.

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 컴포넌트는 일반 텍스트 편집기입니다. 따라서 형식이 지정된 텍스트와 텍스트가 아닌 콘텐츠를 올바르게 읽거나 보여 줄 수 없습니다. 하지만 이러한 텍스트와 콘텐츠를 파일에 쓸 수는 있습니다.