Überschreiben von Dateien mit FileSavePicker ersetzt die Datei nicht

Numax-9658 0 Zuverlässigkeitspunkte
2024-02-05T15:47:38.16+00:00

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

Universelle Windows-Plattform (UWP)
C#
C#
Eine objektorientierte und typsichere Programmiersprache, die ihre Wurzeln in der C-Sprachenfamilie hat und die komponentenorientierte Programmierung unterstützt
15 Fragen
0 Kommentare Keine Kommentare
{count} Stimmen

1 Antwort

Sortieren nach: Am hilfreichsten
  1. Numax-9658 0 Zuverlässigkeitspunkte
    2024-02-05T16:38:10.73+00:00

    Problem ist gelöst. Mit stream.SetLength(0); kann die Länge des Streams zuückgesetzt werden.

    0 Kommentare Keine Kommentare

Ihre Antwort

Fragesteller*innen können Antworten als akzeptierte Antworten markiert werden, wodurch Benutzer*innen wissen, dass diese Antwort das Problem gelöst hat.