C# 发布创建的文件
我有以下代码将Base64字符串转换为PDF文件,保存它,然后尝试打开它:C# 发布创建的文件,c#,windows-8,windows-runtime,C#,Windows 8,Windows Runtime,我有以下代码将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 = A
//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应用程序 我怀疑这就是问题所在:
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();
}
我怀疑这就是问题所在:
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();
}
我必须将代码更改为以下内容:
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();
}
}
}
我必须将代码更改为以下内容:
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();
}
}
}
我试过了,但也犯了同样的错误。我也尝试过:`var outStream=fs.GetOutputStreamAt(0);var dataWriter=new Windows.Storage.Streams.dataWriter(扩展);dataWriter.WriteBytes(字节);等待dataWriter.StoreAsync();dataWriter.DetachStream();等待流出。FlushAsync();exptream.Dispose();但这也没用。我现在已经知道了,我马上就发布答案,这确实帮了大忙,不过谢谢!:)我试过了,但也犯了同样的错误。我也尝试过:`var outStream=fs.GetOutputStreamAt(0);var dataWriter=new Windows.Storage.Streams.dataWriter(扩展);dataWriter.WriteBytes(字节);等待dataWriter.StoreAsync();dataWriter.DetachStream();等待流出。FlushAsync();exptream.Dispose();但这也没用。我现在已经知道了,我马上就发布答案,这确实帮了大忙,不过谢谢!:)