2016-06-02 16 views
0

Ich versuche, eine Reihe von Dateien in einem Ordner zu speichern. Dieser Ordner existiert bereits, aber ich möchte ihn und seinen Inhalt vollständig löschen und die neuen Dateien in den Ordner speichern. Ich verwende den folgenden Code:Ausnahme beim Erstellen von Ordner

Project project;  //This is a parameter handed in when the method is called 
List<InkStrokeContainer> containers;  //This is a parameter handed in when the method is called 

var projectFolder = await ApplicationData.Current.LocalFolder.GetFolderAsync(project.Id.ToString()); 
var slidesFolder = await projectFolder.CreateFolderAsync("Slides", CreationCollisionOption.ReplaceExisting); 

StorageFile file; 
IRandomAccessStream stream; 

for (int i = 0; i < containers.Count; i++) 
{ 
    if (containers[i].GetStrokes().Count > 0) 
    { 
     file = await slidesFolder.CreateFileAsync($"{i.ToString()}.jpg", CreationCollisionOption.ReplaceExisting); 
     stream = await file.OpenAsync(FileAccessMode.ReadWrite); 
     await containers[i].SaveAsync(stream); 
     await stream.FlushAsync(); 
    } 
} 

Aber ich bin immer eine Ausnahme das zweite Mal, dass ich versuche dies zu tun:

Kann eine Datei nicht erstellen, wenn die Datei bereits vorhanden ist. (Ausnahme von HRESULT: 0x800700B7)

Beachten Sie, dass ich einmal speichern kann und den Ordner ordnungsgemäß ersetzt. Erst wenn ich es ein zweites Mal versuche, scheitert es. Es sollte den vorhandenen Gegenstand bei einer Kollision ersetzen, also vermute ich, dass ich etwas nicht richtig loslasse, aber ich habe keine Ahnung was.

Antwort

0

Ah ich habe es gefunden! Ich ersetzte den Stream-Saving-Code mit diesem:

using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite)) 
    await containers[i].SaveAsync(stream); 

und es funktioniert jetzt gut.

Ersetzen await stream.FlushAsync() mit stream.Dispose() scheint auch den Trick zu tun.

Verwandte Themen