2013-04-23 2 views
10

Sto costruendo un'app di Windows 8 Metro con XAML/C#. Sto salvando un file .xml mia struttura dati con un flusso, come questo:Come posso ottenere il nome di un file generato con uno stream in C#?

XmlSerializer serializer = new XmlSerializer(typeof(MyObjectType)); 

using (var stream = await App.LocalStorage.OpenStreamForWriteAsync(MyObject.Title + ".xml", Windows.Storage.CreationCollisionOption.GenerateUniqueName)) 
    serializer.Serialize(stream, MyObject); 

Dove:

App.LocalStorage 

è ovviamente un objecty StorageFolder impostato

Windows.Storage.ApplicationData.Current.LocalFolder 

Il GenerateUniqueName l'opzione è impostata per evitare collisioni, perché i miei oggetti possono avere lo stesso titolo. Ora, ho bisogno di ottenere il nome del file generato dal mio stream, come posso ottenerlo?

Grazie

+3

hai già provato il debug e verificato tutte le proprietà dell'oggetto flusso? la classe concreta e tutti i campi disponibili? Credo che il flusso di base o qualcosa del genere dovrebbe essere lì, ha avuto problemi simili in passato. –

+0

Che cos'è MyObject e in che modo è impostata la proprietà MyObject.Title? – Abbas

risposta

10

Provare a creare prima il file.

var sourceFileName = MyObject.Title + ".xml"; 
StorageFile storageFile = await App.LocalStorage.CreateFileAsync(sourceFileName, Windows.Storage.CreationCollisionOption.GenerateUniqueName); 

using (var stream = await storageFile.OpenAsync(FileAccessMode.ReadWrite)) 
{ 
    serializer.Serialize(stream, MyObject); 
} 
2

Il metodo OpenStreamForWriteAsync non sembra dare alcun modo semplice per accedere a queste informazioni. Potresti passare ad accedervi in ​​un altro modo:

StorageFile file = await App.LocalStorage.CreateFileAsync(...); 
using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite)) 
    // do stuff, file name is at file.Name