Rozwój systemu Windows10 - Zarządzanie plikami
W każdej aplikacji jedną z najważniejszych rzeczy są dane. Jeśli jesteś.net programista, możesz wiedzieć o izolowanym magazynie i ta sama koncepcja jest stosowana w aplikacjach Universal Windows Platform (UWP).
Lokalizacje plików
Są to obszary, w których aplikacja może uzyskać dostęp do danych. Aplikacja zawiera pewien obszar, który jest prywatny dla tej konkretnej aplikacji i niedostępny dla innych, ale istnieje wiele innych obszarów, w których można przechowywać i zapisywać dane w pliku.
Poniżej podano krótkie opisy każdego folderu.
S.No. | Folder i opis |
---|---|
1 | App package folder Menedżer pakietów instaluje wszystkie powiązane pliki aplikacji w folderze pakietu aplikacji, a aplikacja może odczytywać dane tylko z tego folderu. |
2 | Local folder Aplikacje przechowują dane lokalne w folderze lokalnym. Może przechowywać dane do limitu na urządzeniu pamięci masowej. |
3 | Roaming folder Ustawienia i właściwości związane z aplikacją są przechowywane w folderze mobilnym. Inne urządzenia również mogą uzyskiwać dostęp do danych z tego folderu. Ma ograniczony rozmiar do 100 KB na aplikację. |
4 | Temp Folder Korzystanie z magazynu tymczasowego i nie ma gwarancji, że będzie ono nadal dostępne po ponownym uruchomieniu aplikacji. |
5 | Publisher Share Pamięć współdzielona dla wszystkich aplikacji od tego samego wydawcy. Jest to zadeklarowane w manifeście aplikacji. |
6 | Credential Locker Służy do bezpiecznego przechowywania obiektów poświadczających hasło. |
7 | OneDrive OneDrive to bezpłatna pamięć masowa online dołączona do konta Microsoft. |
8 | Cloud Przechowuj dane w chmurze. |
9 | Known folders Te foldery są już znane foldery, takie jak Moje obrazy, Wideo i Muzyka. |
10 | Removable storage Urządzenie pamięci masowej USB lub zewnętrzny dysk twardy itp. |
Interfejsy API obsługi plików
W systemie Windows 8 wprowadzono nowe interfejsy API do obsługi plików. Te interfejsy API znajdują się wWindows.Storage i Windows.Storage.Streamsprzestrzenie nazw. Możesz użyć tych interfejsów API zamiastSystem.IO.IsolatedStorageprzestrzeń nazw. Korzystając z tych interfejsów API, łatwiej będzie przenieść aplikację na Windows Phone do Sklepu Windows i możesz łatwo uaktualnić swoje aplikacje do przyszłych wersji systemu Windows.
Aby uzyskać dostęp do folderów lokalnych, mobilnych lub tymczasowych, musisz wywołać te interfejsy API -
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFolder roamingFolder = ApplicationData.Current.RoamingFolder;
StorageFolder tempFolder = ApplicationData.Current.TemporaryFolder;
Aby utworzyć nowy plik w folderze lokalnym, użyj następującego kodu -
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile textFile = await localFolder.CreateFileAsync(filename,
CreationCollisionOption.ReplaceExisting);
Oto kod otwierający nowo utworzony plik i zapisujący zawartość w tym pliku.
using (IRandomAccessStream textStream = await textFile.OpenAsync(FileAccessMode.ReadWrite)) {
using (DataWriter textWriter = new DataWriter(textStream)){
textWriter.WriteString(contents);
await textWriter.StoreAsync();
}
}
Możesz ponownie otworzyć ten sam plik z folderu lokalnego, jak pokazano w kodzie podanym poniżej.
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);
}
}
Aby zrozumieć, jak działa odczytywanie i zapisywanie danych, spójrzmy na prosty przykład. Poniżej podano kod XAML, w którym dodawane są różne kontrolki.
<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>
Poniżej podano implementację języka C # dla różnych zdarzeń, a także implementację FileHelper klasa do odczytu i zapisu danych do pliku tekstowego.
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;
}
}
}
Kiedy powyższy kod zostanie skompilowany i wykonany, zobaczysz następujące okno.
Teraz piszesz coś w polu tekstowym i klikasz “Write Data to File”przycisk. Program zapisze dane do pliku tekstowego w folderze lokalnym. Jeśli klikniesz“Read Data from File” przycisk, program odczyta dane z tego samego pliku tekstowego, który znajduje się w folderze lokalnym i wyświetli je w bloku tekstowym.