다음을 통해 공유


파일 시스템 도우미

샘플을 찾아봅니다. 샘플 찾아보기

이 문서에서는 .NET 다중 플랫폼 앱 UI(.NET MAUI) IFileSystem 인터페이스를 사용하는 방법을 설명합니다. 이 인터페이스는 앱의 캐시 및 데이터 디렉터리에 액세스하는 도우미 메서드를 제공하고 앱 패키지의 파일에 액세스하는 데 도움이 됩니다.

인터페이스의 IFileSystem 기본 구현은 속성을 통해 FileSystem.Current 사용할 수 있습니다. IFileSystem 인터페이스와 FileSystem 클래스는 모두 네임스페이스에 Microsoft.Maui.Storage 포함됩니다.

파일 시스템 도우미 사용

각 운영 체제에는 앱 캐시 및 앱 데이터 디렉터리에 대한 고유한 경로가 있습니다. 인터페이스는 IFileSystem 이러한 디렉터리 경로에 액세스하기 위한 플랫폼 간 API를 제공합니다.

캐시 디렉터리

캐시 데이터를 저장할 애플리케이션 디렉터리를 가져옵니다. 캐시 데이터는 임시 데이터보다 오래 유지해야 하지만 운영 체제에서 이 스토리지를 지울 수 있으므로 앱을 작동하는 데 필요한 데이터가 되어서는 안 되는 모든 데이터에 사용할 수 있습니다.

string cacheDir = FileSystem.Current.CacheDirectory;

앱 데이터 디렉터리

사용자 데이터 파일이 아닌 모든 파일에 대한 앱의 최상위 디렉터리를 가져옵니다. 이러한 파일은 운영 체제 동기화 프레임워크를 사용하여 백업됩니다.

string mainDir = FileSystem.Current.AppDataDirectory;

번들 파일

앱 패키지에 번들로 제공되는 파일을 열려면 메서드를 OpenAppPackageFileAsync 사용하고 파일 이름을 전달합니다. 이 메서드는 파일 내용을 나타내는 읽기 전용 Stream 을 반환합니다. 다음 예제에서는 메서드를 사용하여 파일의 텍스트 내용을 읽는 방법을 보여 줍니다.

public async Task<string> ReadTextFile(string filePath)
{
    using Stream fileStream = await FileSystem.Current.OpenAppPackageFileAsync(filePath);
    using StreamReader reader = new StreamReader(fileStream);

    return await reader.ReadToEndAsync();
}

다음 예제에서는 앱 패키지에서 번들 글꼴 파일을 여는 방법을 보여 줍니다.

await using var myFont = await FileSystem.OpenAppPackageFileAsync("MyFont.ttf");

앱 데이터 폴더에 번들 파일 복사

앱의 번들 파일을 수정할 수 없습니다. 그러나 캐시 디렉터리 또는 앱 데이터 디렉터리에 번들 파일을 복사할 수 있습니다. 다음 예제에서는 번들된 파일을 앱 데이터 폴더에 복사하는 데 사용합니다 OpenAppPackageFileAsync .

public async Task CopyFileToAppDataDirectory(string filename)
{
    // Open the source file
    using Stream inputStream = await FileSystem.Current.OpenAppPackageFileAsync(filename);

    // Create an output filename
    string targetFile = Path.Combine(FileSystem.Current.AppDataDirectory, filename);

    // Copy the file to the AppDataDirectory
    using FileStream outputStream = File.Create(targetFile);
    await inputStream.CopyToAsync(outputStream);
}

플랫폼 간 차이점

이 섹션에서는 파일 시스템 도우미와의 플랫폼별 차이점에 대해 설명합니다.

  • FileSystem.CacheDirectory
    현재 컨텍스트의 CacheDir 을 반환합니다.

  • FileSystem.AppDataDirectory
    API 23 이상부터 자동 백업을 사용하여 백업되는 현재 컨텍스트의 FilesDir을 반환합니다.

  • FileSystem.OpenAppPackageFileAsync
    MauiAsset빌드 동작사용하여 프로젝트에 추가된 파일을 이 메서드로 열 수 있습니다. .NET MAUI 프로젝트는 Resources\Raw 폴더의 모든 파일을 MauiAsset으로 처리합니다.

    메서드는 FileSystem.OpenPackageFileAsync 속성에 액세스하여 Android에서 스트림의 길이를 Result.Length 가져올 수 없습니다. 대신 전체 스트림을 읽고 자산의 크기를 가져오기 위해 얼마나 많은 바이트를 계산해야 합니다.