3

In this i am trying to convert word to pdf file. But i am getting an error "The process cannot access the file because it is being used by another process".

    public Microsoft.Office.Interop.Word.Document wordDocuments { get; set; }

    Microsoft.Office.Interop.Word.Application apword = new Microsoft.Office.Interop.Word.Application();
    try
    {
        if (uploadFInput.HasFile)
        {
            targetPathip = Server.MapPath(Path.GetFileName(uploadFInput.PostedFile.FileName));

            if (File.Exists(targetPathip))
            {
                File.Delete(targetPathip);
            }

            string Extentsion_path = Path.GetExtension(targetPathip);
            string Filename_path = Path.GetFileName(targetPathip);
            if (Extentsion_path == ".doc" || Extentsion_path == ".docx")
            {
                uploadFInput.SaveAs(targetPathip);
                LblFleip.Text = targetPathip;

                //wordDocuments = apword.Documents.Open(Filename_path);
                wordDocuments = apword.Documents.Open(Filename_path);
                // wordDocuments = apword.Documents.Open(targetPathip);

                wordDocuments.ExportAsFixedFormat(Filename_path, WdExportFormat.wdExportFormatPDF);
                apword.Documents.Close(Filename_path);
            }
            string filename = Path.GetFileName(targetPathip);
            uploadFInput.SaveAs(targetPathip);
            LblFleip.Text = targetPathip;
        }
    }
    catch (Exception ex)
    {
        apword = null;
        return;
    }

Is there anything missing in my code while converting? Can anyone tell me how to convert word to pdf.

4

5 回答 5

2

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

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

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

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

两者都是出色的工具,一旦您使用它们,它们将成为您军械库的一部分。

于 2013-06-18T08:24:12.890 回答
0

如果您第一次运行代码 - 可能会好起来的。但很明显,文件没有正确处理。Standart .net GC不能Interop正确处理对象。所以,一些提示:
1)不要使用Interop.Word.Documentor来创建公共属性Interop.Word.Application。在您的方法中使用它们并尽快处理。
2) 尽快关闭的第二个原因Application是 RPC 服务器超时。如果您保持Application打开一段时间,它将自动与 RPC 服务器断开连接,您将无法使用它。

考虑到这一点,您必须apword.Quit();finally声明中调用,而不是catch单独apword = null使用是不够的。
如果应用程序因错误而关闭 - 肯定会终止 word 进程。
并且不要忘记wordDocuments.Close(ref SaveChanges)在离开方法之前调用。

于 2015-08-12T08:52:59.287 回答
-1

曾经遇到过这样的问题,请在打开文件之前尝试关闭文件(听起来很愚蠢,但对我有用......)。

apword.Documents.Close(Filename_path);
wordDocuments = apword.Documents.Open(Filename_path);
于 2013-06-18T07:10:02.663 回答
-1

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

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

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

于 2013-06-18T07:01:51.547 回答
-2

你只需要添加

using System.Threading;

在cs页面的顶部..并添加

Thread.SpinWait(6000);

在显示错误的文本顶部。

试试这个,如果你需要任何帮助告诉我。

于 2013-06-18T06:29:26.123 回答