2013-10-11 81 views
0

在我的Windows商店应用我保存这样的文件:C# - 扩展StorageFile类添加自定义字符串属性

StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName.Replace('/', '_'), 
       CreationCollisionOption.GenerateUniqueName); 

现在我想加一个标识,一个字符串,该文件,这样我可以在另一时刻访问此属性。

我想重写CreateFileAsync方法,但它不工作:

public class MyStorageFolder : StorageFolder 
{ 
    public async Task<MyStorageFile> CreateFileAsync(string x) 
    {    
     MyStorageFile file = (MyStorageFile) await ApplicationData.Current.LocalFolder.CreateFileAsync(x.Replace('/', '_')); 

     return file; 
    } 

} 

public class MyStorageFile : StorageFile 
{ 
    private string _objectId = string.Empty; 
    public string ObjectId 
    { 
     get { return this._objectId; } 
     set { this._objectId = value } 
    } 
} 

我收到错误“无法CONVER型StorageFile到MyStorageFile” ......有没有办法做到这一点?!? !我不知道怎么样才能保存这些信息,所以我需要一个完整的替代方法来存储我需要的信息! !

回答

1

Composition

public class MyStorageFile { 
    StorageFile File { get; set; } 
    String MyProperty { get; set; } 
} 

public class MyStorageFolder : StorageFolder { 
    public async Task<MyStorageFile> CreateFileAsync(string x) 
    {    
     MyStorageFile file = new MyStorageFile();   
     file.File = (MyStorageFile) await ApplicationData.Current.LocalFolder.CreateFileAsync(x.Replace('/', '_')); 
      return file; 
    } 

} 
+0

是的,但如果我以后得到的文件,localFolder.GetFileAsync(X),我将失去myProperty的信息! – CaptainAmerica

+0

我在想这是正确的解决方案,但StorageFile类是密封的,所以我不能扩展它...你有想法吗?! – CaptainAmerica

0

是的。创建StorageFile类扩展并以异步方式读取/写入您的内容。

async public static Task WriteAllTextAsync(this StorageFile storageFile, string content) 
     { 
      var inputStream = await storageFile.OpenAsync(FileAccessMode.ReadWrite); 
      var writeStream = inputStream.GetOutputStreamAt(0); 
      DataWriter writer = new DataWriter(writeStream); 
      writer.WriteString(content); 
      await writer.StoreAsync(); 
      await writeStream.FlushAsync(); 
     } 

代码从以下链接拍摄: http://dotnetspeak.com/2011/10/reading-and-writing-files-in-winrt

+0

谢谢你的回答...但我不想写一个字符串INTO文件...我想关联文件信息,一个字符串,我将来会使用... – CaptainAmerica

+0

If你所引用的这些信息可以被注入到流中,稍后你可以做这样的事情:dataWriter.WriteUInt32(yourId); dataWriter.WriteString(内容);然后在读取时,首先获取int id,然后获取字符串内容。这样你就可以将你的流与一个id关联起来。也许不是理想的方式,但如果还有其他更优雅的方式,我也愿意学习 – Nostradamus