WPF WebBrowser 控件以只读方式加载本地文件
WPF WebBrowser Control loading local file readonly
我想使用 WebBrowser 控件显示多个文件。
但需要在WebBrowser 控件显示后重命名、删除文件。
问题是,文件被锁定,直到 WebBrowser 设置为显示另一个文件或不显示文件。
有没有办法强制 WebBrowser 缓存文件并在加载后立即释放?
现在我从文件创建了一个内存流并将其传递给 WebBrowser 控件。
using (var fileStream = new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.Read))
{
fileMemoryStream = new MemoryStream();
fileStream.CopyTo(fileMemoryStream);
}
fileMemoryStream.Position = 0;
webBrowser.NavigateToStream(fileMemoryStream);
但现在我看不到 pdf 文档,但我看到 pdf 作为 ASCII 代码。
"%PDF-1.2 %ÈÇÄF 4 0 obj << /Type /Outlines /Count 0 >> endobj 5 0 obj ......"
有什么方法可以将文件中的程序类型附加到流中以显示 PDF 吗?
WPF 浏览器的工作方式很遗憾,它可能无法从流中显示 PDF,除非您进行一些黑客攻击,例如 运行 您自己的小型 http 服务器在应用程序中并使用该服务器流式传输 pdf。但在你的情况下,将 pdf 复制到临时文件夹并从那里打开要容易得多:
File.Copy("path_to_pdf", Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".pdf");
并从那个位置显示它。当然,用完了别忘了清理哦
我想使用 WebBrowser 控件显示多个文件。 但需要在WebBrowser 控件显示后重命名、删除文件。 问题是,文件被锁定,直到 WebBrowser 设置为显示另一个文件或不显示文件。
有没有办法强制 WebBrowser 缓存文件并在加载后立即释放?
现在我从文件创建了一个内存流并将其传递给 WebBrowser 控件。
using (var fileStream = new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.Read))
{
fileMemoryStream = new MemoryStream();
fileStream.CopyTo(fileMemoryStream);
}
fileMemoryStream.Position = 0;
webBrowser.NavigateToStream(fileMemoryStream);
但现在我看不到 pdf 文档,但我看到 pdf 作为 ASCII 代码。
"%PDF-1.2 %ÈÇÄF 4 0 obj << /Type /Outlines /Count 0 >> endobj 5 0 obj ......"
有什么方法可以将文件中的程序类型附加到流中以显示 PDF 吗?
WPF 浏览器的工作方式很遗憾,它可能无法从流中显示 PDF,除非您进行一些黑客攻击,例如 运行 您自己的小型 http 服务器在应用程序中并使用该服务器流式传输 pdf。但在你的情况下,将 pdf 复制到临时文件夹并从那里打开要容易得多:
File.Copy("path_to_pdf", Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".pdf");
并从那个位置显示它。当然,用完了别忘了清理哦