UWP覆盖现有文件

维斯努

我试图在UWP应用程序中创建和写入文件。第一次执行时,它工作正常;第二次,它覆盖了第一个内容,而文件仅包含第二次执行中的内容。

         Windows.Storage.StorageFolder Location = ApplicationData.Current.LocalFolder;
    var lstfiles = await Location.GetFilesAsync(CommonFileQuery.OrderByName);
      var foundfile = lstfiles.Where(x => x.Name==Test.dat").FirstOrDefault();

        if (foundfile==null)
        {
            StorageFile fil = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("Test.dat");
            //StorageFile file = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync("Test.dat");
            using (IRandomAccessStream writeStream = await fil.OpenAsync(FileAccessMode.ReadWrite))
            {
                System.IO.Stream s = writeStream.AsStreamForWrite();
                System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
                settings.Async = true;
                using (System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(s, settings))
                {

                    writer.WriteStartElement("Order");
                    writer.WriteElementString("OrderID", "y1");
                    writer.WriteElementString("OrderTotal", "y2");
                    writer.WriteElementString("Customer", "y3");
                    writer.WriteElementString("Phone", "y4");
                    writer.Flush();
                    await writer.FlushAsync();
                }
            }
        }
        else
        {
            StorageFile file = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync("Test.dat");
            using (IRandomAccessStream writeStream = await file.OpenAsync(FileAccessMode.ReadWrite))
            {
                System.IO.Stream s = writeStream.AsStreamForWrite();
                System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
                settings.Async = true;
                using (System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(s, settings))
                {
                    writer.WriteStartElement("Order");
                    writer.WriteElementString("OrderID", "v51");
                    writer.WriteElementString("OrderTotal", "v2");
                    writer.WriteElementString("Customer", "v3");
                    writer.WriteElementString("Phone", "v4");
                   // await FileIO.AppendTextAsync(file, writer.ToString());
                   writer.Flush();
                    await writer.FlushAsync();
                }
            }
        }
Matteo Marciano-MSCP

尽管您必须先阅读整个Xml,然后才能添加新节点,而无论性能如何下降,都应该使用更简洁的方法

StorageFile file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("Test.dat", CreationCollisionOption.OpenIfExists);
var info = await file.GetBasicPropertiesAsync();
XDocument xDocument = null;
if(info.Size > 0)
    /* read existing file here */
else
    /* create an empty document here */
XElement root = xDocument.Element("Root");
IEnumerable<XElement> rows = root.Descendants("Order");
XElement firstRow = rows.First();
firstRow.AddBeforeSelf(
    new XElement("Order",
    new XElement("OrderID", "y1"),
    new XElement("OrderTotal", "y2"),
    new XElement("Customer", "y3"),
    new XElement("Phone", "y4")));
await FileIO.WriteTextAsync(file, xDocument.ToString());

这样,您就不会重复代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

提取并覆盖现有文件

来自分类常见问题

cffile正在覆盖现有文件

来自分类Dev

如何覆盖现有的.txt文件

来自分类Dev

C覆盖文件中的现有记录

来自分类Dev

如何覆盖现有文件Java

来自分类Dev

使用存在标志覆盖现有文件

来自分类Dev

cffile正在覆盖现有文件

来自分类Dev

用Python的“ wget”覆盖现有文件?

来自分类Dev

写入现有文件而不会覆盖/擦除

来自分类Dev

curl:如何不覆盖现有文件?

来自分类Dev

以编程方式覆盖现有文件

来自分类Dev

覆盖现有文件并重命名

来自分类Dev

SharpSVN覆盖现有文件和文件夹

来自分类Dev

覆盖现有目录?

来自分类Dev

如何在覆盖之前使用TFileStream截断现有文件?

来自分类Dev

svn checkout是否会覆盖现有的本地文件?

来自分类Dev

写入现有文件而不会在Fortran中覆盖

来自分类Dev

如何执行不覆盖现有文件的MSBuild复制命令?

来自分类Dev

阻止mongodump覆盖现有文件(改为重命名)

来自分类Dev

`git checkout branch-.`,不覆盖现有文件

来自分类Dev

批处理脚本,用于复制和覆盖现有文件

来自分类Dev

svn checkout是否会覆盖现有的本地文件?

来自分类Dev

使用cp覆盖现有文件夹

来自分类Dev

cp -a是否刷新现有文件,覆盖还是跳过

来自分类Dev

在Python中覆盖现有excel文件时图形丢失

来自分类Dev

防止ffmpeg覆盖现有的输出文件

来自分类Dev

bsdtar:如何避免覆盖现有文件信息?

来自分类Dev

Excel另存为PDF并覆盖现有文件

来自分类Dev

为什么`cp`被设计为静默覆盖现有文件?