[英]IsolatedStorageFile or Windows.Storage APIs for Windows Phone 8?
[英]How to properly read and write a file using Windows.Storage on Windows Phone 8
我只需要使用Windows.Storage API在Windows Phone 8中簡單地寫入文件並從文件中讀取即可。 使用舊的IsolatedStorage方法相對容易,但是事實證明,使用新的WinRT API更加困難。
我一直在嘗試編寫它,但是似乎有所有這些奇怪的東西,例如IBuffer。 等等。 使用完整版的WinRT,使用Windows.Storage.FileIO非常容易,它似乎可以阻止像我這樣的開發人員發瘋。 但是,它沒有在Phone版本中實現。 另外,我觀看了Channel9視頻,其中顯示了一些代碼示例,但是他們犯了一個錯誤,因為他們使用標記為Security Critical的方法來獲取常規流。 顯然,不允許使用常規Stream。
因此,有人可以為我提供簡潔,正確的代碼段,說明如何將文件讀入字符串以及如何將字符串寫到文件中,以及正確的使用和處理技術嗎?
這是一個簡單的例子:
public async Task WriteDataToFileAsync(string fileName, string content)
{
byte[] data = Encoding.Unicode.GetBytes(content);
var folder = ApplicationData.Current.LocalFolder;
var file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
using (var s = await file.OpenStreamForWriteAsync())
{
await s.WriteAsync(data, 0, data.Length);
}
}
public async Task<string> ReadFileContentsAsync(string fileName)
{
var folder = ApplicationData.Current.LocalFolder;
try
{
var file = await folder.OpenStreamForReadAsync(fileName);
using (var streamReader = new StreamReader(file))
{
return streamReader.ReadToEnd();
}
}
catch (Exception)
{
return string.Empty;
}
}
像這樣使用它們:
await this.WriteDataToFileAsync("afile.txt", "some text to save in a file");
var contents = await this.ReadFileContentsAsync("afile.txt");
我還沒有試過,隨着Windows Phone 8,但這里是什么的WinRT XAML工具包已經為Windows 8可以工作。
</ s> </ s> </ s>
using System;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Streams;
namespace WinRTXamlToolkit.IO.Extensions
{
/// <summary>
/// Extensions for simple writing and reading of strings to/from files.
/// </summary>
/// <remarks>
/// Note that these were created before FileIO class existed in WinRT, but they still serve a purpose.
/// </remarks>
public static class StringIOExtensions
{
/// <summary>
/// Reads a string from a text file.
/// </summary>
/// <param name="fileName">Name of the file.</param>
/// <param name="folder">The folder.</param>
/// <returns></returns>
public static async Task<string> ReadFromFile(
string fileName,
StorageFolder folder = null)
{
folder = folder ?? ApplicationData.Current.LocalFolder;
var file = await folder.GetFileAsync(fileName);
using (var fs = await file.OpenAsync(FileAccessMode.Read))
{
using (var inStream = fs.GetInputStreamAt(0))
{
using (var reader = new DataReader(inStream))
{
await reader.LoadAsync((uint)fs.Size);
string data = reader.ReadString((uint)fs.Size);
reader.DetachStream();
return data;
}
}
}
}
/// <summary>
/// Writes a string to a text file.
/// </summary>
/// <param name="text">The text to write.</param>
/// <param name="fileName">Name of the file.</param>
/// <param name="folder">The folder.</param>
/// <param name="options">
/// The enum value that determines how responds if the fileName is the same
/// as the name of an existing file in the current folder. Defaults to ReplaceExisting.
/// </param>
/// <returns></returns>
public static async Task WriteToFile(
this string text,
string fileName,
StorageFolder folder = null,
CreationCollisionOption options = CreationCollisionOption.ReplaceExisting)
{
folder = folder ?? ApplicationData.Current.LocalFolder;
var file = await folder.CreateFileAsync(
fileName,
options);
using (var fs = await file.OpenAsync(FileAccessMode.ReadWrite))
{
using (var outStream = fs.GetOutputStreamAt(0))
{
using (var dataWriter = new DataWriter(outStream))
{
if (text != null)
dataWriter.WriteString(text);
await dataWriter.StoreAsync();
dataWriter.DetachStream();
}
await outStream.FlushAsync();
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.