このトピックでは、ユニバーサル Windows プラットフォーム (UWP) アプリでファイルの読み取りと書き込みを開始するために知っておくべきことを説明します。 主な 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 を提供します。
- 音楽ライブラリや画像ライブラリなどの既知のライブラリに StorageFolder を提供する Windows.Storage.KnownFolders。
ファイルにテキストを書き込む
この概要では、テキストの読み取りと書き込みという単純なシナリオに焦点を当てます。 まず、 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()
は、1 行に 1 つの文字列を書き込む文字列のコレクションをファイルに追加します。
ファイルからテキストを読み取る
ファイルの書き込みと同様に、ファイルの読み取りは、ファイルの場所を指定することから始まります。 上の例と同じ場所を使用します。 次に、 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<user name>\AppData\Local\Packages<app package identifier>\ の下に複数のフォルダーが作成され、アプリのローカル ファイル、ローミング ファイル、一時ファイルなどが格納されます。 アプリは、これらのフォルダーにアクセスするための機能を宣言する必要はありません。また、これらのフォルダーには他のアプリからはアクセスできません。 これらのフォルダーは、アプリがアンインストールされるときにも削除されます。
一般的に使用するアプリ フォルダーの一部を次に示します。
LocalState: 現在のデバイスにローカルなデータの場合。 デバイスがバックアップされると、このディレクトリ内のデータは OneDrive のバックアップ イメージに保存されます。 ユーザーがデバイスをリセットまたは交換すると、データが復元されます。 OneDrive にバックアップしたくないローカル データを保存するには、
Windows.Storage.ApplicationData.Current.LocalFolder.
でアクセスできる LocalCacheFolderを使用し、Windows.Storage.ApplicationData.Current.LocalCacheFolder
でこのフォルダーにアクセスします。RoamingState: ここに格納されているデータはローミングされなくなりました (Windows 11 の時点)。ただし、フォルダーは引き続き使用できます。
Windows.Storage.ApplicationData.Current.RoamingFolder
を使用してローミング フォルダーにアクセスします。 推奨される代替は Azure App Service です。 Azure App Service は、広くサポートされ、十分に文書化され、信頼性が高く、iOS、Android、Web などのクロスプラットフォーム/エコシステム間のシナリオをサポートしています。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 の |
フォルダー、ファイルを作成するためのメソッド、およびフォルダーの作成、名前変更、および削除のメソッドに関する情報を提供します。 |
FileIO の |
テキストを読み書きする簡単な方法を提供します。 このクラスは、バイト配列またはバッファーの内容を読み取り/書き込みすることもできます。 |
PathIO | ファイルの文字列パスを指定して、ファイルのテキストを読み書きする簡単な方法を提供します。 このクラスは、バイト配列またはバッファーの内容を読み取り/書き込みすることもできます。 |
DataReader と DataWriter | ストリームから/ストリームへのバッファー、バイト、整数、GUID、タイムスパンなどの読み取りと書き込み。 |
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 名前空間を使用して、JavaScript Object Notation (JSON) オブジェクト、配列、文字列、数値、およびブール値をエンコードおよびデコードする方法を示します。 |
その他のコード サンプル | カテゴリ ドロップダウン リストで [ ファイル、フォルダー、ライブラリ ] を選択します。 |