2013-02-23 2 views
1

У меня есть следующий код, который преобразует строку Base64 в файл PDF, сохраняет его затем пытается открыть его:Release Созданный файл

//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); 

IOutputStreamIDisposable проходит, но вы не избавляясь от потока. Попробуйте изменить этот раздел кода:

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 = новый Windows.Storage.Streams.DataWriter (outStream); dataWriter.WriteBytes (байты); ожидание dataWriter.StoreAsync(); dataWriter.DetachStream(); wait outStream.FlushAsync(); outStream.Dispose(); Но это тоже не сработало. – Cheese1223

+0

У меня есть это сейчас. Я отправлю ответ за секунду, это очень помогло, хотя спасибо! :) – Cheese1223

Смежные вопросы