首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Windows8中使用StreamWriter编写文件?

如何在Windows8中使用StreamWriter编写文件?
EN

Stack Overflow用户
提问于 2012-04-24 10:00:09
回答 2查看 21.3K关注 0票数 18

我在windows-8中创建StreamWriter对象时遇到了麻烦,通常我只是创建一个实例,只是传递一个字符串作为参数,但在Windows8中我得到一个错误,指示它应该接收一个流,但我注意到流是一个抽象类,有人知道如何编写xml文件的代码吗? BTW我使用.xml是因为我想保存序列化的对象,或者有人知道如何在Windows8中将序列化对象保存到文件中?

有什么想法吗?

当前正在使用Windows 8消费者预览版

代码:

StreamWriter sw = new StreamWriter("person.xml");

错误:

The best overloaded method match for 'System.IO.StreamWriter.StreamWriter(System.IO.Stream)' has some invalid arguments

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-24 15:46:39

你可以使用下面这样的代码来代替StreamWriter:

代码语言:javascript
复制
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.CreateFileAsync();

using (IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
    using (IOutputStream outputStream = fileStream.GetOutputStreamAt(0))
    {
        using (DataWriter dataWriter = new DataWriter(outputStream))
        {
            //TODO: Replace "Bytes" with the type you want to write.
            dataWriter.WriteBytes(bytes);
            await dataWriter.StoreAsync();
            dataWriter.DetachStream();
        }

        await outputStream.FlushAsync();
    }
}

您可以查看WinRTXamlToolkit库中的StringIOExtensions类以供示例使用。

编辑*

虽然上面所有的方法都可以工作--它们是在WinRT中的FileIO类可用之前编写的,这简化了上面解决方案所解决的大多数常见场景,因为您现在只需调用await FileIO.WriteTextAsync(file, contents)将文本写入文件,并且也有类似的方法来读取、写入或附加字符串、字节、字符串列表或IBuffers

票数 27
EN

Stack Overflow用户

发布于 2013-04-09 22:48:52

您可以创建一个通用的静态方法,它可以通过我们的应用程序使用,如下所示

代码语言:javascript
复制
 private async Task<T> ReadXml<T>(StorageFile xmldata)
    {
        XmlSerializer xmlser = new XmlSerializer(typeof(List<myclass>));
        T data;
        using (var strm = await xmldata.OpenStreamForReadAsync())
        {
            TextReader Reader = new StreamReader(strm);
            data = (T)xmlser.Deserialize(Reader);
        }
        return data;
    }

    private async Task writeXml<T>(T Data, StorageFile file)
    {
        try
        {
            StringWriter sw = new StringWriter();
            XmlSerializer xmlser = new XmlSerializer(typeof(T));
            xmlser.Serialize(sw, Data);

            using (IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.ReadWrite))
            {
                using (IOutputStream outputStream = fileStream.GetOutputStreamAt(0))
                {
                    using (DataWriter dataWriter = new DataWriter(outputStream))
                    {
                        dataWriter.WriteString(sw.ToString());
                        await dataWriter.StoreAsync();
                        dataWriter.DetachStream();
                    }

                    await outputStream.FlushAsync();
                }
            }


        }
        catch (Exception e)
        {
            throw new NotImplementedException(e.Message.ToString());

        }

    }

要编写xml,只需使用

代码语言:javascript
复制
 StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("data.xml",CreationCollisionOption.ReplaceExisting);
        await  writeXml(Data,file);

和读取xml的使用

代码语言:javascript
复制
  StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("data.xml");
      Data =  await  ReadXml<List<myclass>>(file);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10290820

复制
相关文章

相似问题

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