Windows10開発-ファイル管理
どのアプリケーションでも、最も重要なことの1つはデータです。あなたがいる場合.net 開発者は、分離されたストレージについて知っているかもしれません。同じ概念がユニバーサルWindowsプラットフォーム(UWP)アプリケーションにも適用されます。
ファイルの場所
これらは、アプリケーションがデータにアクセスできる領域です。アプリケーションには、その特定のアプリケーション専用で他のアプリケーションからはアクセスできない領域が含まれていますが、データをファイル内に保存および保存できる領域は他にもたくさんあります。
以下に、各フォルダの簡単な説明を示します。
S.No. | フォルダと説明 |
---|---|
1 | App package folder パッケージマネージャーは、アプリのすべての関連ファイルをアプリパッケージフォルダーにインストールします。アプリは、このフォルダーからのみデータを読み取ることができます。 |
2 | Local folder アプリケーションは、ローカルデータをローカルフォルダに保存します。ストレージデバイスの制限までデータを保存できます。 |
3 | Roaming folder アプリケーションに関連する設定とプロパティは、ローミングフォルダに保存されます。他のデバイスもこのフォルダーのデータにアクセスできます。アプリケーションごとに最大100KBのサイズに制限されています。 |
4 | Temp Folder 一時ストレージの使用。アプリケーションが再度実行されたときに引き続き使用できるという保証はありません。 |
5 | Publisher Share 同じパブリッシャーのすべてのアプリの共有ストレージ。アプリマニフェストで宣言されています。 |
6 | Credential Locker パスワード資格情報オブジェクトの安全な保管に使用されます。 |
7 | OneDrive OneDriveは、Microsoftアカウントに付属する無料のオンラインストレージです。 |
8 | Cloud データをクラウドに保存します。 |
9 | Known folders これらのフォルダは、マイピクチャー、ビデオ、ミュージックなどの既知のフォルダです。 |
10 | Removable storage USBストレージデバイスまたは外付けハードドライブなど。 |
ファイル処理API
Windows 8では、ファイル処理用に新しいAPIが導入されました。これらのAPIはにありますWindows.Storage そして Windows.Storage.Streams名前空間。代わりにこれらのAPIを使用できますSystem.IO.IsolatedStorage名前空間。これらのAPIを使用すると、Windows PhoneアプリをWindowsストアに簡単に移植でき、アプリケーションを将来のバージョンのWindowsに簡単にアップグレードできます。
ローカル、ローミング、または一時フォルダにアクセスするには、これらのAPIを呼び出す必要があります-
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFolder roamingFolder = ApplicationData.Current.RoamingFolder;
StorageFolder tempFolder = ApplicationData.Current.TemporaryFolder;
ローカルフォルダに新しいファイルを作成するには、次のコードを使用します-
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile textFile = await localFolder.CreateFileAsync(filename,
CreationCollisionOption.ReplaceExisting);
新しく作成されたファイルを開き、そのファイルにコンテンツを書き込むためのコードを次に示します。
using (IRandomAccessStream textStream = await textFile.OpenAsync(FileAccessMode.ReadWrite)) {
using (DataWriter textWriter = new DataWriter(textStream)){
textWriter.WriteString(contents);
await textWriter.StoreAsync();
}
}
以下のコードに示すように、ローカルフォルダから同じファイルを再度開くことができます。
using (IRandomAccessStream textStream = await textFile.OpenReadAsync()) {
using (DataReader textReader = new DataReader(textStream)){
uint textLength = (uint)textStream.Size;
await textReader.LoadAsync(textLength);
contents = textReader.ReadString(textLength);
}
}
データの読み取りと書き込みがどのように機能するかを理解するために、簡単な例を見てみましょう。以下に示すのは、さまざまなコントロールが追加されたXAMLコードです。
<Page
x:Class = "UWPFileHandling.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:UWPFileHandling"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button x:Name = "readFile" Content = "Read Data From File"
HorizontalAlignment = "Left" Margin = "62,518,0,0"
VerticalAlignment = "Top" Height = "37" Width = "174"
Click = "readFile_Click"/>
<TextBox x:FieldModifier = "public" x:Name = "textBox"
HorizontalAlignment = "Left" Margin = "58,145,0,0" TextWrapping = "Wrap"
VerticalAlignment = "Top" Height = "276" Width = "245"/>.
<Button x:Name = "writeFile" Content = "Write Data to File"
HorizontalAlignment = "Left" Margin = "64,459,0,0"
VerticalAlignment = "Top" Click = "writeFile_Click"/>
<TextBlock x:Name = "textBlock" HorizontalAlignment = "Left"
Margin = "386,149,0,0" TextWrapping = "Wrap"
VerticalAlignment = "Top" Height = "266" Width = "250"
Foreground = "#FF6231CD"/>
</Grid>
</Page>
以下に示すのは、さまざまなイベントのC#実装と、 FileHelper テキストファイルにデータを読み書きするためのクラス。
using System;
using System.IO;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
// The Blank Page item template is documented at
http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace UWPFileHandling {
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public partial class MainPage : Page {
const string TEXT_FILE_NAME = "SampleTextFile.txt";
public MainPage(){
this.InitializeComponent();
}
private async void readFile_Click(object sender, RoutedEventArgs e) {
string str = await FileHelper.ReadTextFile(TEXT_FILE_NAME);
textBlock.Text = str;
}
private async void writeFile_Click(object sender, RoutedEventArgs e) {
string textFilePath = await FileHelper.WriteTextFile(TEXT_FILE_NAME, textBox.Text);
}
}
public static class FileHelper {
// Write a text file to the app's local folder.
public static async Task<string>
WriteTextFile(string filename, string contents) {
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile textFile = await localFolder.CreateFileAsync(filename,
CreationCollisionOption.ReplaceExisting);
using (IRandomAccessStream textStream = await
textFile.OpenAsync(FileAccessMode.ReadWrite)){
using (DataWriter textWriter = new DataWriter(textStream)){
textWriter.WriteString(contents);
await textWriter.StoreAsync();
}
}
return textFile.Path;
}
// Read the contents of a text file from the app's local folder.
public static async Task<string> ReadTextFile(string filename) {
string contents;
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile textFile = await localFolder.GetFileAsync(filename);
using (IRandomAccessStream textStream = await textFile.OpenReadAsync()){
using (DataReader textReader = new DataReader(textStream)){
uint textLength = (uint)textStream.Size;
await textReader.LoadAsync(textLength);
contents = textReader.ReadString(textLength);
}
}
return contents;
}
}
}
上記のコードをコンパイルして実行すると、次のウィンドウが表示されます。
ここで、テキストボックスに何かを書き込んでクリックします “Write Data to File”ボタン。プログラムは、ローカルフォルダのテキストファイルにデータを書き込みます。クリックすると“Read Data from File” ボタンを押すと、プログラムはローカルフォルダにある同じテキストファイルからデータを読み取り、テキストブロックに表示します。