Phát triển Windows10 - Quản lý tệp

Trong bất kỳ ứng dụng nào, một trong những điều quan trọng nhất là dữ liệu. Nếu bạn là.net nhà phát triển, bạn có thể biết về bộ nhớ biệt lập và khái niệm tương tự theo sau các ứng dụng Nền tảng Windows chung (UWP).

Vị trí tệp

Đây là những khu vực mà ứng dụng của bạn có thể truy cập dữ liệu. Ứng dụng chứa một số khu vực riêng tư đối với ứng dụng cụ thể đó và không thể truy cập được đối với các ứng dụng khác, nhưng có nhiều khu vực khác, nơi bạn có thể lưu trữ và lưu dữ liệu của mình bên trong tệp.

Dưới đây là các mô tả ngắn gọn về từng thư mục.

Không. Thư mục & Mô tả
1

App package folder

Trình quản lý gói cài đặt tất cả các tệp liên quan của ứng dụng vào thư mục Gói ứng dụng và ứng dụng chỉ có thể đọc dữ liệu từ thư mục này.

2

Local folder

Các ứng dụng lưu trữ dữ liệu cục bộ vào một thư mục cục bộ. Nó có thể lưu trữ dữ liệu lên đến giới hạn trên thiết bị lưu trữ.

3

Roaming folder

Cài đặt và các thuộc tính liên quan đến ứng dụng được lưu trữ trong thư mục chuyển vùng. Các thiết bị khác cũng có thể truy cập dữ liệu từ thư mục này. Nó có kích thước giới hạn lên đến 100KB cho mỗi ứng dụng.

4

Temp Folder

Sử dụng bộ nhớ tạm thời và không có gì đảm bảo rằng nó sẽ vẫn khả dụng khi ứng dụng của bạn chạy lại.

5

Publisher Share

Bộ nhớ dùng chung cho tất cả các ứng dụng từ cùng một nhà xuất bản. Nó được khai báo trong tệp kê khai ứng dụng.

6

Credential Locker

Được sử dụng để lưu trữ an toàn các đối tượng thông tin xác thực mật khẩu.

7

OneDrive

OneDrive là bộ nhớ trực tuyến miễn phí đi kèm với tài khoản Microsoft của bạn.

số 8

Cloud

Lưu trữ dữ liệu trên đám mây.

9

Known folders

Các thư mục này đã được biết đến là các thư mục như Ảnh của tôi, Video và Nhạc.

10

Removable storage

Thiết bị lưu trữ USB hoặc ổ cứng ngoài, v.v.

API xử lý tệp

Trong Windows 8, các API mới đã được giới thiệu để xử lý tệp. Các API này nằm trongWindows.StorageWindows.Storage.Streamskhông gian tên. Bạn có thể sử dụng các API này thay vìSystem.IO.IsolatedStoragekhông gian tên. Bằng cách sử dụng các API này, việc chuyển ứng dụng Windows Phone của bạn sang Windows Store sẽ dễ dàng hơn và bạn có thể dễ dàng nâng cấp các ứng dụng của mình lên các phiên bản Windows trong tương lai.

Để truy cập các thư mục cục bộ, chuyển vùng hoặc tạm thời, bạn cần gọi các API này -

StorageFolder localFolder = ApplicationData.Current.LocalFolder; 
StorageFolder roamingFolder = ApplicationData.Current.RoamingFolder; 
StorageFolder tempFolder = ApplicationData.Current.TemporaryFolder;

Để tạo một tệp mới trong một thư mục cục bộ, hãy sử dụng mã sau:

StorageFolder localFolder = ApplicationData.Current.LocalFolder; 
StorageFile textFile = await localFolder.CreateFileAsync(filename, 
   CreationCollisionOption.ReplaceExisting);

Đây là đoạn mã để mở tệp mới tạo và viết một số nội dung trong tệp đó.

using (IRandomAccessStream textStream = await textFile.OpenAsync(FileAccessMode.ReadWrite)) { 
	
   using (DataWriter textWriter = new DataWriter(textStream)){
      textWriter.WriteString(contents); 
      await textWriter.StoreAsync(); 
   } 
		
}

Bạn có thể mở lại cùng một tệp từ thư mục cục bộ như được hiển thị trong đoạn mã dưới đây.

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); 
   } 
	
}

Để hiểu cách đọc và ghi dữ liệu hoạt động, chúng ta hãy xem một ví dụ đơn giản. Dưới đây là mã XAML trong đó các điều khiển khác nhau được thêm vào.

<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>

Dưới đây là cách triển khai C # cho các sự kiện khác nhau và cả việc triển khai FileHelper lớp đọc và ghi dữ liệu vào tệp văn bản.

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; 
      } 
   } 
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy cửa sổ sau.

Bây giờ, bạn viết một cái gì đó vào hộp văn bản và nhấp vào “Write Data to File”cái nút. Chương trình sẽ ghi dữ liệu vào tệp văn bản trong một thư mục cục bộ. Nếu bạn nhấp vào“Read Data from File” , chương trình sẽ đọc dữ liệu từ cùng một tệp văn bản, tệp này nằm trong thư mục cục bộ và sẽ hiển thị nó trên khối văn bản.