首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取和写入XML文件的异步方法

读取和写入XML文件的异步方法
EN

Stack Overflow用户
提问于 2016-03-03 11:53:02
回答 1查看 8.3K关注 0票数 2

我正在使用安卓/ios和windows中的DependencyService来编写和读取Xamarin.forms项目中的XML文件。我指的是处理文件

我能够实现示例中给出的函数,但实际上我想要的是读取和写入XML文件。

我遵循了一个通常的c#过程来读取和写入xml文件,但是由于这个方法是异步的,所以会出现错误。

我从来没有使用过异步等待方法,所以不知道如何实现它。

以下是我尝试过的:

代码语言:javascript
复制
public async Task SaveTextAsync(string filename, string text)
{
    ApplicationData data = new ApplicationData();
    ApplicationVersion version = new ApplicationVersion();
    version.SoftwareVersion = "test";
    data.ApplicationVersion = version;

    XmlSerializer writer =
        new XmlSerializer(typeof(ApplicationData));
    System.IO.FileStream file = System.IO.File.Create(path);

    writer.Serialize(file, data);
    file.Close();
}

public async Task<string> LoadTextAsync(string filename)
{
    var path = CreatePathToFile(filename);
    ApplicationData cars = null;
    XmlSerializer serializer = new XmlSerializer(typeof(ApplicationData));
    StreamReader reader = new StreamReader(path);
    cars = (ApplicationData)serializer.Deserialize(reader);
    reader.Close();
}
string CreatePathToFile(string filename)
{
    var docsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
    return Path.Combine(docsPath, filename);
}

编辑

对txt文件代码的读写工作如下:

代码语言:javascript
复制
public async Task SaveTextAsync (string filename, string text)
{
    var path = CreatePathToFile (filename);
    using (StreamWriter sw = File.CreateText (path))
        await sw.WriteAsync(text);
}

public async Task<string> LoadTextAsync (string filename)
{
    var path = CreatePathToFile (filename);
    using (StreamReader sr = File.OpenText(path))
        return await sr.ReadToEndAsync();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-04 12:58:25

我设法让它起作用了。这是我的代码:

代码语言:javascript
复制
public async Task SaveTextAsync(string filename)
{
    var path = CreatePathToFile(filename);
    ApplicationData data = new ApplicationData();
    ApplicationVersion version = new ApplicationVersion();
    version.SoftwareVersion = "test version";
    data.ApplicationVersion = version;
    XmlSerializer writer =
        new XmlSerializer(typeof(ApplicationData));
    System.IO.FileStream file = System.IO.File.Create(path);
    writer.Serialize(file, data);
    file.Close();

}

public async Task<ApplicationData> LoadTextAsync(string filename)
{
    var path = CreatePathToFile(filename);

    ApplicationData records = null;
    await Task.Run(() =>
    {
        // Create an instance of the XmlSerializer specifying type and namespace.
        XmlSerializer serializer = new XmlSerializer(typeof(ApplicationData));

        // A FileStream is needed to read the XML document.
        FileStream fs = new FileStream(path, FileMode.Open);
        XmlReader reader = XmlReader.Create(fs);

        // Use the Deserialize method to restore the object's state.
        records = (ApplicationData)serializer.Deserialize(reader);
        fs.Close();
    });
    return records;
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35771489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档