【问题标题】:StringWriter in windows universal appWindows 通用应用程序中的 StringWriter
【发布时间】:2016-08-11 19:29:12
【问题描述】:

我对编程完全陌生。

我正在尝试创建一个非常简单的应用程序,其中包含三个文本框和一个最终文本块。我想将这三个文本框的输入保存在本地,这样我就可以在页面底部的 TextBlock 中以一个字符串读取并显示它。

我已经读到 StreamWriter 类是我应该使用的。我只是不知道从哪里开始......

到目前为止,基本上没有很多代码

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();

        string name = tbxName.Text;
        string age = tbxAge.Text;
        string dinner = tbxDinner.Text;

        string[] answer = { name, age, dinner };

        StringWriter saveText = new StringWriter();
        StringReader readText = new StringReader(answer.ToString());
    }
}

如何存储每个 TextBox 的输入并在页面底部的 TextBlock 中的一个字符串中读取和显示该输入?

我希望应用保存并能够在应用关闭并再次重新打开后显示输入。

对不起,我知道这是超级简单的东西......

【问题讨论】:

  • 在解决方案资源管理器中右键单击项目并选择属性。然后使用 Settings 选项卡创建您的应用程序设置。将创建一个 settings.settings 文件。即使在应用程序关闭并重新打开后,更改也会基于此进行修改。

标签: c# wpf input universal stringwriter


【解决方案1】:

对于 UWP,我们将把我们的数据保存在本地文件夹的 ApplicationData 中。我们将 StreamWriter 写入一个文件流和 StreamReader 从同一个流中读取。

去阅读更多关于ApplicationData的信息

首先创建一个类来捕获您需要从 UI 声明的所有变量。

public class Entity
{
    public string name { get; set; }
    public int age { get; set; }
    public string dinner { get; set; }
}

现在让我们开始将内容从 UI 提交到 applicationData 存储。

using System.IO
OnClickEvent()
{
    Entity ent = new Entity();
    ent.name = tbxName.Text;
    ent.age = int.Parse(tbxAge.Text);
    ent.dinner = tbxDinner.Text;

    //save
        var myStream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync("[PUT-HERE-NAME].txt", CreationCollisionOption.ReplaceExisting);

        using (StreamWriter writer = new StreamWriter(myStream))
        {
            var results = JsonConvert.SerializeObject(ent);

            writer.Write(results);
        }
}

现在让我们从存储中读取写入的数据。我们现在要使用 Stream Reader。

using System.IO;
using Newtonsoft.Json;
OnClickEvent
{
    Entity ent = new Entity();
    string content = string.Empty;
        var localFolder = ApplicationData.Current.LocalFolder;
        await localFolder.CreateFileAsync("test.txt", CreationCollisionOption.OpenIfExists);
        var stream = await localFolder.OpenStreamForReadAsync("test.txt");
        using (StreamReader reader = new StreamReader(stream))
        {
            content = await reader.ReadToEndAsync();

            ent= JsonConvert.DeserializeObject<Entity>(content);

        }
}

能够读取后,现在就可以向用户显示数据了。

tbxName.Text = ent.name;
tbxAge.Text = ent.age.ToString();
tbxDinner.Text = ent.dinner

如果您遇到任何问题或不明白的地方,请随时询问。

【讨论】:

    【解决方案2】:

    我想将这三个TextBox的输入保存在本地

    在本地,您的意思是在文件中?如果是,您可以每行保存一个数组项,这样做:

    System.IO.File.WriteAllLines("textfile.txt", answer);
    

    然后,在其他时刻,您可以再次创建answer

    string[] answer = System.IO.File.ReadAllLines("textfile.txt");
    

    编辑: 既然是开发手机应用,最好使用StorageFile

    StorageFolder folder =
        Windows.Storage.ApplicationData.Current.LocalFolder;
    StorageFile sampleFile =
        await folder.CreateFileAsync("test.txt", CreationCollisionOption.ReplaceExisting);
    await Windows.Storage.FileIO.WriteTextAsync(sampleFile, string.Join(";", answer));
    

    这会将答案保存在一个文件中,数据由;分隔

    回读:

    string text = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);
    string answer = text.Split(';');
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 2015-11-09
    • 2016-01-24
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多