이 항목에서는 UWP(유니버설 Windows 플랫폼) 앱에서 파일 읽기 및 쓰기를 시작하기 위해 알아야 할 내용을 다룹니다. 기본 API 및 형식이 도입되고 자세한 내용을 알아볼 수 있도록 링크가 제공됩니다.
자습서가 아닙니다. 자습서를 원하는 경우 파일 만들기, 쓰기 및 읽기 를 참조하세요. 이 파일은 파일을 만들고 읽고 쓰는 방법 외에도 버퍼와 스트림을 사용하는 방법을 보여 줍니다. 파일을 만들고, 읽고, 쓰고, 복사하고, 삭제하는 방법과 앱에서 쉽게 다시 액세스할 수 있도록 파일 속성을 검색하고 파일 또는 폴더를 기억하는 방법을 보여 주는 파일 액세스 샘플 에 관심이 있을 수 있습니다.
파일에서 텍스트를 작성하고 읽는 코드와 앱의 로컬, 로밍 및 임시 폴더에 액세스하는 방법을 살펴보겠습니다.
알아야 할 사항
파일에서 텍스트를 읽거나 쓰기 위해 알아야 할 주요 형식은 다음과 같습니다.
Windows.Storage.StorageFile 은 파일을 나타냅니다. 이 클래스에는 파일에 대한 정보와 파일 만들기, 열기, 복사, 삭제 및 이름 바꾸기 메서드를 제공하는 속성이 있습니다. 문자열 경로를 다루는 것에 익숙할 수 있습니다. 문자열 경로를 사용하는 일부 Windows 런타임 API가 있지만 UWP에서 작업하는 일부 파일에 경로가 없거나 다루기 힘든 경로가 있을 수 있으므로 StorageFile 을 사용하여 파일을 나타내는 경우가 많습니다. StorageFile.GetFileFromPathAsync()를 사용하여 문자열 경로를 StorageFile로 변환할 수 있습니다.
FileIO 클래스는 텍스트를 읽고 쓰는 쉬운 방법을 제공합니다. 이 클래스는 바이트 배열 또는 버퍼의 내용을 읽고 쓸 수도 있습니다. 이 클래스는 PathIO 클래스와 매우 유사합니다. 주요 차이점은 PathIO가 문자열 경로를 받는 대신 StorageFile을 받는다는 것입니다.
Windows.Storage.StorageFolder 는 폴더(디렉터리)를 나타냅니다. 이 클래스에는 파일을 만들고, 폴더의 내용을 쿼리하고, 폴더를 만들고, 이름을 변경하고, 삭제하는 메서드와 폴더에 대한 정보를 제공하는 속성이 있습니다.
StorageFolder 가져오는 일반적인 방법은 다음과 같은 것들이 있습니다.
- Windows.Storage.Pickers.FolderPicker는 사용자가 사용하려는 폴더로 이동할 수 있게 합니다.
- Windows.Storage.ApplicationData.Current는 앱의 로컬, 로밍, 임시 폴더 중 하나와 관련된 특정 StorageFolder를 제공합니다.
- Windows.Storage.KnownFolders는 음악 또는 그림 라이브러리와 같은 알려진 라이브러리에 대한 StorageFolder을 제공합니다.
파일에 텍스트 쓰기
이 소개에서는 텍스트 읽기 및 쓰기와 같은 간단한 시나리오에 집중합니다. 먼저 FileIO 클래스를 사용하여 파일에 텍스트를 쓰는 일부 코드를 살펴보겠습니다.
Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile file = await storageFolder.CreateFileAsync("test.txt",
Windows.Storage.CreationCollisionOption.OpenIfExists);
await Windows.Storage.FileIO.WriteTextAsync(file, "Example of writing a string\r\n");
// Append a list of strings, one per line, to the file
var listOfStrings = new List<string> { "line1", "line2", "line3" };
await Windows.Storage.FileIO.AppendLinesAsync(file, listOfStrings); // each entry in the list is written to the file on its own line.
먼저 파일이 위치해야 하는 위치를 식별합니다.
Windows.Storage.ApplicationData.Current.LocalFolder
는 앱이 설치될 때 생성되는 로컬 데이터 폴더에 대한 액세스를 제공합니다. 앱에서 액세스할 수 있는 폴더에 대한 자세한 내용은 파일 시스템에 액세스하기를 참조하세요.
그런 다음 StorageFolder 를 사용하여 파일을 만들거나 이미 있는 경우 엽니다.
FileIO 클래스는 파일에 텍스트를 쓰는 편리한 방법을 제공합니다.
FileIO.WriteTextAsync()
는 파일의 전체 내용을 제공된 텍스트로 바꿉니다.
FileIO.AppendLinesAsync()
는 문자열 컬렉션을 파일에 추가하여 한 줄당 하나의 문자열을 작성합니다.
파일에서 텍스트 읽기
파일 작성과 마찬가지로 파일 읽기는 파일이 있는 위치를 지정하는 것으로 시작합니다. 위 예제와 동일한 위치를 사용합니다. 그런 다음 FileIO 클래스를 사용하여 해당 내용을 읽습니다.
Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile file = await storageFolder.GetFileAsync("test.txt");
string text = await Windows.Storage.FileIO.ReadTextAsync(file);
파일의 각 줄을 컬렉션의 개별 문자열로 읽을 수도 있습니다. IList<string> contents = await Windows.Storage.FileIO.ReadLinesAsync(sampleFile);
파일 시스템에 액세스
UWP 플랫폼에서는 사용자 데이터의 무결성 및 개인 정보를 보장하기 위해 폴더 액세스가 제한됩니다.
앱 폴더
UWP 앱이 설치되면 c:\users<사용자 이름>\AppData\Local\Packages<앱 패키지 식별자>\ 아래에 여러 폴더가 만들어져 앱의 로컬, 로밍 및 임시 파일을 저장합니다. 앱은 이러한 폴더에 액세스하는 기능을 선언할 필요가 없으며 다른 앱에서는 이러한 폴더에 액세스할 수 없습니다. 이러한 폴더는 앱이 제거될 때도 제거됩니다.
다음은 일반적으로 사용하는 앱 폴더 중 일부입니다.
LocalState: 현재 디바이스에 대한 로컬 데이터의 경우. 디바이스가 백업되면 이 디렉터리의 데이터가 OneDrive의 백업 이미지에 저장됩니다. 사용자가 디바이스를 다시 설정하거나 교체하면 데이터가 복원됩니다.
Windows.Storage.ApplicationData.Current.LocalFolder.
사용하여 이 폴더에 액세스합니다. OneDrive에 백업하지 않으려는 로컬 데이터를 저장하려면 사용하여 액세스할 수 있는Windows.Storage.ApplicationData.Current.LocalCacheFolder
을 이용하세요.RoamingState: 여기에 저장된 데이터는 더 이상 로밍되지 않지만(Windows 11 현재), 폴더는 계속 사용할 수 있습니다.
Windows.Storage.ApplicationData.Current.RoamingFolder
을 사용하여 로밍 폴더에 액세스합니다. 권장되는 대체는 Azure App Service입니다. Azure App Service는 널리 지원되고, 잘 문서화되고, 신뢰할 수 있으며, iOS, Android 및 웹과 같은 플랫폼 간/에코시스템 간 시나리오를 지원합니다.TempState: 앱이 실행되고 있지 않을 때 삭제될 수 있는 데이터의 경우
Windows.Storage.ApplicationData.Current.TemporaryFolder
을(를) 사용하여 이 폴더에 액세스합니다.
파일 시스템의 나머지 부분에 액세스
UWP 앱은 매니페스트에 해당 기능을 추가하여 특정 사용자 라이브러리에 액세스하려는 의도를 선언해야 합니다. 그런 다음 앱이 설치될 때 지정된 라이브러리에 대한 액세스 권한을 부여하는지 확인하라는 메시지가 사용자에게 표시됩니다. 그렇지 않은 경우 앱이 설치되지 않습니다. 사진, 비디오 및 음악 라이브러리에 액세스할 수 있는 기능이 있습니다. 전체 목록은 앱 기능 선언 을 참조하세요. 이러한 라이브러리에 대한 StorageFolder 얻으려면 Windows.Storage.KnownFolders 클래스를 사용합니다.
문서 라이브러리
사용자의 문서 라이브러리에 액세스할 수 있는 기능이 있지만 이 기능은 제한되므로 특별한 승인을 받기 위한 프로세스를 따르지 않는 한 Microsoft Store에서 이를 선언하는 앱이 거부됩니다. 일반적인 용도로는 사용되지 않습니다. 대신 사용자가 폴더 또는 파일로 이동할 수 있도록 파일 또는 폴더 선택기( 선택기가 있는 파일 및 폴더 열기 및 선택기로 파일 저장 참조)를 사용합니다. 사용자가 폴더 또는 파일로 이동할 때 앱에 액세스할 수 있는 권한을 암시적으로 부여하고 시스템에서 액세스를 허용합니다.
일반 액세스
혹은 앱이 매니페스트에서 제한된 broadFileSystem 기능을 선언할 수 있으며, 이를 위해서는 Microsoft Store의 승인이 필요합니다. 그런 다음 앱은 파일 또는 폴더 선택기의 개입 없이 사용자가 액세스할 수 있는 모든 파일에 액세스할 수 있습니다.
앱에서 액세스할 수 있는 위치의 포괄적인 목록은 파일 액세스 권한을 참조하세요.
유용한 API 및 문서
다음은 파일 및 폴더를 시작하는 데 도움이 되는 API 및 기타 유용한 설명서에 대한 간략한 요약입니다.
유용한 API
응용 프로그램 인터페이스 (API) | 설명 |
---|---|
Windows.Storage.StorageFile |
파일에 대한 정보와 파일 만들기, 열기, 복사, 삭제 및 이름 바꾸기를 위한 메서드를 제공합니다. |
Windows.Storage.StorageFolder | 폴더에 대한 정보, 파일을 만드는 방법 및 폴더를 만들고, 이름을 변경하고, 삭제하는 메서드를 제공합니다. |
파일IO | 텍스트를 읽고 쓰는 쉬운 방법을 제공합니다. 이 클래스는 바이트 배열 또는 버퍼의 내용을 읽고 쓸 수도 있습니다. |
PathIO | 파일에 대한 문자열 경로가 지정된 경우 파일에서 텍스트를 읽거나 쓰는 쉬운 방법을 제공합니다. 이 클래스는 바이트 배열 또는 버퍼의 내용을 읽고 쓸 수도 있습니다. |
DataReader 및 DataWriter | 스트림에서 버퍼, 바이트, 정수, GUID, TimeSpans 등을 읽고 씁니다. |
Windows.Storage.ApplicationData.Current |
로컬 폴더, 로밍 폴더 및 임시 파일 폴더와 같은 앱용으로 만든 폴더에 대한 액세스를 제공합니다. |
Windows.Storage.Pickers.FolderPicker | 사용자가 폴더를 선택하면 그에 대한 StorageFolder를 반환합니다. 이렇게 하면 앱에서 기본적으로 액세스할 수 없는 위치에 액세스할 수 있습니다. |
Windows.Storage.Pickers.FileOpenPicker | 사용자가 열 파일을 선택하도록 하며 그 파일에 대한 StorageFile을 반환합니다. 앱에서 기본적으로 액세스할 수 없는 파일에 액세스하는 방법입니다. |
Windows.Storage.Pickers.FileSavePicker |
사용자가 파일의 파일 이름, 확장명 및 스토리지 위치를 선택할 수 있도록 합니다. StorageFile이 반환됩니다. 앱에서 기본적으로 액세스할 수 없는 위치에 파일을 저장하는 방법입니다. |
Windows.Storage.Streams 네임스페이스 |
스트림 읽기 및 쓰기를 다룹니다. 특히 버퍼, 바이트, 정수, GUID, TimeSpans 등을 읽고 쓰는 DataReader 및 DataWriter 클래스를 살펴봅니다. |
유용한 문서
주제 | 설명 |
---|---|
Windows.Storage 네임스페이스 | API 참조 문서입니다. |
파일, 폴더 및 라이브러리 |
개념적 문서입니다. |
파일 만들기, 쓰기 및 읽기 | 텍스트, 이진 데이터 및 스트림 만들기, 읽기 및 쓰기를 다룹니다. |
로컬로 앱 데이터 저장 시작 | 로컬 데이터를 저장하기 위한 모범 사례를 다루는 것 외에도 LocalSettings 및 LocalCache 폴더의 용도를 다룹니다. |
설정 및 기타 앱 데이터 저장 및 검색 | 로컬, 로밍 및 임시 폴더와 같은 다양한 앱 데이터 저장소에 대한 개요를 제공합니다. |
파일 액세스 권한 | 앱에서 액세스할 수 있는 파일 시스템 위치에 대한 정보입니다. |
선택기를 사용하여 파일 및 폴더 열기 | 사용자가 선택기 UI를 통해 결정하도록 하여 파일 및 폴더에 액세스하는 방법을 보여 줍니다. |
Windows.Storage.Streams | 스트림을 읽고 쓰는 데 사용되는 형식입니다. |
음악, 사진 및 비디오 라이브러리의 파일 및 폴더 | 라이브러리에서 폴더를 제거하고, 라이브러리의 폴더 목록을 가져와서 저장된 사진, 음악 및 비디오를 검색하는 방법을 설명합니다. |
유용한 코드 샘플
코드 샘플 | 설명 |
---|---|
애플리케이션 데이터 샘플 | 애플리케이션 데이터 API를 사용하여 각 사용자와 관련된 데이터를 저장하고 검색하는 방법을 보여 줍니다. |
파일 액세스 샘플 | 파일을 만들고, 읽고, 쓰고, 복사하고, 삭제하는 방법을 보여줍니다. |
파일 선택 도구 샘플 | 사용자가 UI를 사용하여 파일 및 폴더를 선택하도록 하여 파일 및 폴더에 액세스하는 방법과 사용자가 저장할 파일의 이름, 파일 형식 및 위치를 지정할 수 있도록 파일을 저장하는 방법을 보여 줍니다. |
JSON 샘플 | Windows.Data.Json 네임스페이스사용하여 JSON(JavaScript Object Notation) 개체, 배열, 문자열, 숫자 및 부울을 인코딩하고 디코딩하는 방법을 보여 줍니다. |
추가 코드 샘플 | 파일, 폴더 및 라이브러리을 범주 드롭다운 목록에서 선택합니다. |