Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误进程无法访问该文件,因为另一进程正在使用该文件_C#_Asp.net_Visual Studio 2010_Pdf_Ms Word - Fatal编程技术网

C# 错误进程无法访问该文件,因为另一进程正在使用该文件

C# 错误进程无法访问该文件,因为另一进程正在使用该文件,c#,asp.net,visual-studio-2010,pdf,ms-word,C#,Asp.net,Visual Studio 2010,Pdf,Ms Word,在这篇文章中,我试图将word转换为pdf文件。但是我犯了个错误 “该进程无法访问该文件,因为另一进程正在使用该文件” 转换时,我的代码中是否缺少任何内容?谁能告诉我如何将word转换为pdf。您只需添加 using System.Threading; 在cs页面的顶部。。 加 在显示错误的文本顶部 尝试此操作,如果需要任何帮助,请告诉我。此变量包含扩展名为filename的文件,因此您尝试在打开的文档上保存文档。添加一个axtension: wordDocuments.ExportAsFi

在这篇文章中,我试图将word转换为pdf文件。但是我犯了个错误 “该进程无法访问该文件,因为另一进程正在使用该文件”

转换时,我的代码中是否缺少任何内容?谁能告诉我如何将word转换为pdf。

您只需添加

using System.Threading;
在cs页面的顶部。。 加

在显示错误的文本顶部


尝试此操作,如果需要任何帮助,请告诉我。

此变量包含扩展名为filename的文件,因此您尝试在打开的文档上保存文档。添加一个axtension:

 wordDocuments.ExportAsFixedFormat(Filename_path + ".pdf",
     WdExportFormat.wdExportFormatPDF);

我猜是行文件.Delete(targetPathip);这不是问题,可能是在第二次运行时,因为应用程序在第一次运行时保持文件打开状态(请参阅任务管理器)。

有一次遇到类似问题,请在打开文件之前尝试关闭文件(听起来很愚蠢,但对我来说很有用…)


您需要做的是确定保持文件打开的进程

要了解这一点,您需要从SysInternals(现在是Microsoft的一部分)下载Process Explorer

这将允许您搜索所有进程,以找出哪些进程具有文件的打开句柄

当然,文件冲突可能与不太明显的文件(如配置或锁定文件)有关。在这种情况下,流程监视器(也来自SysInternals)应该允许您查看失败的地方


这两种工具都是非常优秀的工具,一旦你使用了它们,它们将成为你的武器库的一部分。

如果你第一次运行代码,它可能就没问题了。但很明显,该文件没有得到正确的处理。Standart.net GC无法正确处理
Interop
对象。因此,很少有提示:
1) 不要使用
Interop.Word.Document
Interop.Word.Application
公开属性。在您的方法中使用它们并尽快处理。
2) 尽快关闭
应用程序的第二个原因是RPC服务器超时。如果您将
应用程序保持打开状态一段时间,它将自动与RPC服务器断开连接,您将无法使用它

记住这一点,您必须调用
apword.Quit()finally
语句中,而不是在
catch
apword=null
中使用code>是不够的。
如果应用程序已因错误而关闭,请确保关闭word进程。

在离开方法之前,不要忘记调用
wordDocuments.Close(ref SaveChanges)

wordDocuments=apword.Documents.Open(Filename\u path)。。wordDocuments.ExportAsFixedFormat(Filename\u path,X)
-同一文件名看起来很可疑。@user2246674它在windows窗体中使用了相同的代码…运行此代码时,实际的word文档没有在桌面上打开,是吗?您确定这是它崩溃的实际行,是否已跳过?(在apwords declarationFile.Delete(targetPathip)周围应该有一个using块);问题出在这一行。如果文件已经存在,那么它应该删除。但是在那里,我遇到了一个错误,进程无法访问该文件,因为它正被另一个进程使用。我建议不要这样做…似乎这只会延迟进程problem@mitesh如果pdf或word的文件是ve,这只会延迟它太大了。这很难。我同意@sayse这会延迟我已经尝试过了,它对我很有效。但我必须让它对我的图像进行复制,然后在之后删除。我想知道这是否是第二次运行,如果是案例例外,可以通过正确处理apword来解决:@3wic此方法或pr属性不可用,因为文档窗口未处于活动状态。
Thread.SpinWait(6000);
 wordDocuments.ExportAsFixedFormat(Filename_path + ".pdf",
     WdExportFormat.wdExportFormatPDF);
apword.Documents.Close(Filename_path);
wordDocuments = apword.Documents.Open(Filename_path);