2013-02-23 98 views
1

我有下面的代码是一个Base64字符串转换为PDF文件,保存它,然后尝试打开它:版本创建的文件

//Converts the Base64 data to bytes 
byte[] bytes = Convert.FromBase64String(Base64String); 

//Stores the converted Base64 data in the application's Local Resource directory, in PDF format 
StorageFolder folder = ApplicationData.Current.LocalFolder; 
string fileName = file.pdf"; 
CreationCollisionOption options = CreationCollisionOption.FailIfExists; 

var file = await folder.CreateFileAsync(fileName, options); 
var fs = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite); 
var outStream = fs.GetOutputStreamAt(0); 
var dataWriter = new Windows.Storage.Streams.DataWriter(outStream); 
dataWriter.WriteBytes(bytes); 
await dataWriter.StoreAsync(); 
dataWriter.DetachStream(); 
await outStream.FlushAsync(); 

string pdfPath = folder.Path + "\\" + fileName; 

StorageFile fileToLaunch = await StorageFile.GetFileFromPathAsync(pdfPath); 
await Windows.System.Launcher.LaunchFileAsync(fileToLaunch); 

当文件在Adobe Reader中打开,有一个消息称该文件仍在被另一个应用程序使用。如何让我的应用程序“释放”文件,Adobe可以打开它?请注意这是一个Windows 8应用程序。

回答

1

我的代码更改为以下:

 var file = await folder.CreateFileAsync(fileName, options); 

     using (var fs = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite)) 
     { 
      using (var outStream = fs.GetOutputStreamAt(0)) 
      { 
       using (var dataWriter = new Windows.Storage.Streams.DataWriter(outStream)) 
       { 
        dataWriter.WriteBytes(bytes); 
        await dataWriter.StoreAsync(); 
        dataWriter.DetachStream(); 
        await outStream.FlushAsync(); 
       } 
      } 
     } 
3

我怀疑这就是问题所在:

var outStream = fs.GetOutputStreamAt(0); 

IOutputStream延伸IDisposable,但你不处置流。试着改变代码的那部分:

using (var outStream = fs.GetOutputStreamAt(0)) 
{ 
    var dataWriter = new Windows.Storage.Streams.DataWriter(outStream); 
    dataWriter.WriteBytes(bytes); 
    await dataWriter.StoreAsync(); 
    dataWriter.DetachStream(); 
    await outStream.FlushAsync(); 
} 
+0

我试过,但得到了同样的错误。我也试过: 'var outStream = fs.GetOutputStreamAt(0); var dataWriter = new Windows.Storage.Streams.DataWriter(outStream); dataWriter.WriteBytes(bytes); await dataWriter.StoreAsync(); dataWriter.DetachStream(); await outStream.FlushAsync(); outStream.Dispose(); 但这也没有奏效。 – Cheese1223 2013-02-23 15:16:56

+0

我已经得到了它现在我会在一秒内发布答案,这确实有很大的帮助,虽然谢谢! :) – Cheese1223 2013-02-23 15:22:48

相关问题