【发布时间】:2018-11-24 12:01:54
【问题描述】:
我有一个向 WPF 客户端提供 pdf 的 WCF 服务。客户端在新的 WPF 窗口中打开 pdf 并将其显示在 WebBrowser 元素中。服务将 pdf 作为内存流返回,客户端显示窗口将内存流复制到文件流。我希望能够关闭显示窗口并使用不同的选定 pdf 打开一个新窗口。返回第一个 pdf 后,我无法再打开新的,因为原始 pdf 文件附加到进程。我无法删除以前的文件并将其替换为新文件,因为它附加到进程。我尝试在我的文件流、内存流上使用filestream.dispose 和filestream.close 方法,并在我的服务实例上尝试了close 方法。不管我尝试了什么,我总是得到同样的例外。该文件附加到一个进程。我什至不知道如何识别仍然附加到文件的进程。我正在使用 Visual Studio 2017
客户端代码
public void DisplayCard(string SPID, string strAssetDirectory)
{
ServiceReference1.Service1Client proxy = new ServiceReference1.Service1Client();
Stream ms = proxy.GetServiceCard(SPID, strAssetDirectory);
try
{
using (file = new FileStream(Properties.Settings.Default.ServiceCardDisplayPath, FileMode.Create, FileAccess.Write))
{
ms.CopyTo(file);
file.Close();
}
ms.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
proxy.Close();
ServiceCardBrowser.Navigate($"file://{Properties.Settings.Default.ServiceCardDisplayPath}");
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
File.Delete(Properties.Settings.Default.ServiceCardDisplayPath);
//file.Close();
file.Dispose();
this.Owner.Focus();
}
有没有办法识别附加到文件的进程?
【问题讨论】:
-
对于故障排除,您可以使用工具 Process Explorer 或 Process Monitor(来自 docs.microsoft.com/en-us/sysinternals/downloads/… )来识别哪个进程正在访问文件。