Überschreiben von Dateien mit FileSavePicker ersetzt die Datei nicht

Numax-9658 0 Ansehenspunkte
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
14 Fragen
0 Kommentare Keine Kommentare
{count} Stimmen

1 Antwort

Sortieren nach: Sehr hilfreich
  1. Numax-9658 0 Ansehenspunkte
    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

Antworten können vom Autor der Frage als akzeptierte Antworten gekennzeichnet werden, was Benutzern hilft, die Antwort zu erkennen, die das Problem des Autors gelöst hat.