gpt4 book ai didi

c# - 如何覆盖 UWP 中的文件?

转载 作者:行者123 更新时间:2023-11-30 14:50:51 31 4
gpt4 key购买 nike

我尝试使用 FileSavePicker 覆盖 UWP 中的当前文件。我提到了这个:https://msdn.microsoft.com/zh-cn/windows/uwp/files/quickstart-reading-and-writing-files但是当我用一个较短的文件覆盖一个较长的文件时,出现了一个问题:旧文件(较长)的额外部分没有被删除,就像这样:

旧文件:

abcdefg

以及我要保存的文件:

hij

但是在保存操作之后,我得到了这个:

hijdefg

我的代码在这里:

        private async void Save_Click(object sender, RoutedEventArgs e)
{
XmlDocument Line = SaveToXml();

//Save it
FileSavePicker fileSaving = new FileSavePicker();
fileSaving.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
fileSaving.SuggestedFileName = "NewLine";
fileSaving.FileTypeChoices.Add("Simple Line Files", new List<string>() { ".Line" });
StorageFile file = await fileSaving.PickSaveFileAsync();

if (file != null)
{
CachedFileManager.DeferUpdates(file);
var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
//var stream = await file.OpenStreamForWriteAsync();
using (var outputStream = stream.GetOutputStreamAt(0))
{
using (var dataWriter = new Windows.Storage.Streams.DataWriter(outputStream))
{
string xmlDoc = Line.OuterXml;
Debug.WriteLine(Line.OuterXml);
dataWriter.WriteString(xmlDoc);
await dataWriter.StoreAsync();
await outputStream.FlushAsync();
}
}
stream.Dispose();
}
}

谢谢你帮助我!

最佳答案

您也可以在打开流后立即调用 Stream.SetLength(0) 以在开始写入之前清除它。

var streamToWrite = await file.OpenStreamForWriteAsync().ConfigureAwait(false);
streamToWrite.SetLength(0);
using (var streamWriter = new StreamWriter(streamToWrite))
{
streamWriter.Write(data);
streamWriter.Flush();
}

关于c# - 如何覆盖 UWP 中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35842374/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com