Problem ist gelöst. Mit stream.SetLength(0); kann die Länge des Streams zuückgesetzt werden.
Überschreiben von Dateien mit FileSavePicker ersetzt die Datei nicht
Hallo Zusammen,
ich beschäftige mich für ein Projekt zurzeit mit WinUI3.
Zum speichern einer Datei habe ich zunächst das Beispiel aus der "WinUI3 Gallery" App verwendet. Mit folgendem Code ist das Speichern einer Datei möglich:
private async void SaveProject()
{
var savePicker = new FileSavePicker();
var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(App.MainWindow);
WinRT.Interop.InitializeWithWindow.Initialize(savePicker, hWnd);
savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
savePicker.FileTypeChoices.Add("Project", [".txt"]);
savePicker.SuggestedFileName = $"{Project.CreatedDateTime.ToShortDateString()}";
savePicker.DefaultFileExtension = ".txt";
var file = await savePicker.PickSaveFileAsync();
if (file != null)
{
CachedFileManager.DeferUpdates(file);
using (var stream = await file.OpenStreamForWriteAsync())
{
using (var tw = new StreamWriter(stream))
{
tw.WriteLine("HelloWorld");
// tw.WriteLine("Test");
}
}
var status = await CachedFileManager.CompleteUpdatesAsync(file);
}
}
Wenn ich nun eine Datei speichere und beim nächsten mal dieselbe Datei im FilePicker auswähle, sollte diese ersetzt werden. Wenn ich nun aber einen String oder Stream in die Datei schreiben lasse der kürzer ist als der vorherige, bleiben Reste des alten Strings in der Datei zurück. In meinem Test also:
Inhalt der Datei nach dem ersten Durchlauf mit tw.WriteLine("HelloWorld");
HelloWorld
Inhalt der Datei nach dem ersten Durchlauf mit tw.WriteLine("Test");
Test
orld
Meine Frage ist nun, ob es in der Funktion so vorgesehen ist, oder ob es ein Bug ist?
Gibt es eine Möglichkeit mit dem SaveFilePicker zu prüfen, ob eine Datei bereits existiert und diese dann anschließend zu löschen und eine neue Datei zu erstellen?
Vielen Dank im voraus.
Gruß
Markus