写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

6

********它可以工作!但您必须在文本框中输入任何内容才会显示。我猜这是因为我使用了“TextChanged”事件处理程序。如果我想要在没有用户交互的情况下显示文本文件的内容,我应该使用哪个事件处理程序?********

当按下按钮时,我想在C# Windows 10通用平台应用程序中将一些数据写入文本文件,并且我希望TextBlock或TextBox在我的应用程序中读取该文本文件的内容。

我正在使用一个轴样式应用程序,写入文件的按钮位于一个轴上,我希望包含文本文件内容的TextBlock或TextBox位于另一个轴上。

我的代码如下。它不起作用。我不确定它是否创建和写入文件,我的TextBox或TextBlock中没有任何内容。:(

我从这里获取了代码:https://msdn.microsoft.com/en-us/library/windows/apps/mt185401.aspx

写入文件的代码:

private async void submitButton_Click(object sender, RoutedEventArgs e)
    {
        //WRITE THE TICKET TO A LOCAL DATABASE (txt)//

        //Create the text file to hold the data
        Windows.Storage.StorageFolder storageFolder =
            Windows.Storage.ApplicationData.Current.LocalFolder;
        Windows.Storage.StorageFile ticketsFile =
            await storageFolder.CreateFileAsync("tickets.txt",
                Windows.Storage.CreationCollisionOption.ReplaceExisting);

        //Write data to the file
        await Windows.Storage.FileIO.WriteTextAsync(ticketsFile, "Swift as a shadow");
    }

在文本框中读取文件的代码:

private async void viewTickets_TextChanged(object sender, TextChangedEventArgs e)
    {
        Windows.Storage.StorageFolder storageFolder =
            Windows.Storage.ApplicationData.Current.LocalFolder;
        Windows.Storage.StorageFile ticketsFile =
            await storageFolder.GetFileAsync("tickets.txt");

        string savedTickets = await Windows.Storage.FileIO.ReadTextAsync(ticketsFile);

        viewTickets.Text = savedTickets; 
    }

你确定这些事件被触发了吗?因为其他的一切似乎都很好。 - Shaharyar
我不确定...我甚至不知道是否在写入文本文件。 :( 还有哪些事件处理程序应该用于文本框以自动读取文件? - Jason Brown
那么设置断点并调试您的代码。您想何时读取文件? - Shaharyar
好的,它确实可以工作,看起来你需要在文本框中输入内容才能显示出来。如果可能的话,我希望文本框可以在没有任何用户交互的情况下显示代码... - Jason Brown
你想在点击按钮后立即读取文件吗?我不明白你具体想要什么时候读取和显示它。 - Shaharyar
所以我有一个文本框,其中包含文本文件的内容。一旦文本文件被写入,我希望它的内容在文本框中可见,而无需单击/点击或任何其他操作... - Jason Brown
2个回答

9

你的代码没有问题,唯一的问题是它没有被执行。当你点击 button 后,文件会被创建。但是因为你没有在 textbox 中输入任何内容,所以你永远无法读取文件。

我认为你想要在写入后立即读取它。把你的 Read 文件代码放在 Write 代码之后:

private async void submitButton_Click(object sender, RoutedEventArgs e)
{
    //WRITE THE TICKET TO A LOCAL DATABASE (txt)//

    //Create the text file to hold the data
    Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
    Windows.Storage.StorageFile ticketsFile = await storageFolder.CreateFileAsync("tickets.txt", Windows.Storage.CreationCollisionOption.ReplaceExisting);

    //Write data to the file
    await Windows.Storage.FileIO.WriteTextAsync(ticketsFile, "Swift as a shadow");

    //read file
    string savedTickets = await Windows.Storage.FileIO.ReadTextAsync(ticketsFile);

    viewTickets.Text = savedTickets;
}

并且移除viewTickets_TextChanged事件处理程序。


这个本地文件是否会立即保存在应用程序中?如果没有(我猜是这样的),那么如何保存它,以便下次进入应用程序时可以检索到它? - yalematta
@LayaleMatta 当你保存一个文件时,主要目的是为了以后阅读它。所以很明显,下次进入应用程序时你可以读取它。 - Shaharyar

0
public async Task WriteToDictionaryAsync(Dictionary<string, string> dictionary, StorageFile binarySourceFile)
    {
        await Task.Delay(5);
        using (FileStream fs = File.OpenWrite(binarySourceFile.Path))
        using (BinaryWriter writer = new BinaryWriter(fs))
        {
            // Put count.
            writer.Write(dictionary.Count);
            // Write pairs.
            foreach (var pair in dictionary)
            {
                writer.Write(pair.Key);
                writer.Write(pair.Value);
            }
        }
    }
    public async void WriteToDictionary(Dictionary<string, string> dictionary, StorageFile binarySourceFile)
    {
        await Task.Delay(5);
        using (FileStream fs = File.OpenWrite(binarySourceFile.Path))
        using (BinaryWriter writer = new BinaryWriter(fs))
        {
            // Put count.
            writer.Write(dictionary.Count);
            // Write pairs.
            foreach (var pair in dictionary)
            {
                writer.Write(pair.Key);
                writer.Write(pair.Value);
            }
        }
    }
    public async Task<Dictionary<string, string>> ReadDictionaryAsync(StorageFile binarySourceFile)
    {
        await Task.Delay(5);
        var result = new Dictionary<string, string>();
        using (FileStream fs = File.OpenRead(binarySourceFile.Path))
        using (BinaryReader reader = new BinaryReader(fs))
        {
            // Get count.
            int count = reader.ReadInt32();
            // Read in all pairs.
            for (int i = 0; i < count; i++)
            {
                string key = reader.ReadString();
                string value = reader.ReadString();
                result[key] = value;
            }
        }
        return result;
    }
    public Dictionary<string, string> ReadDictionary(StorageFile binarySourceFile)
    {
        var result = new Dictionary<string, string>();
        using (FileStream fs = File.OpenRead(binarySourceFile.Path))
        using (BinaryReader reader = new BinaryReader(fs))
        {
            // Get count.
            int count = reader.ReadInt32();
            // Read in all pairs.
            for (int i = 0; i < count; i++)
            {
                string key = reader.ReadString();
                string value = reader.ReadString();
                result[key] = value;
            }
        }
        return result;
    }

//生成二进制文件 var binarySourceFile = await StorageData.LocalFolder.CreateFileAsync("binFile" + ".bin", CreationCollisionOption.ReplaceExisting);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接