Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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# 4.0 无法打开word文档并在未锁定的情况下引用它_C# 4.0_Com - Fatal编程技术网

C# 4.0 无法打开word文档并在未锁定的情况下引用它

C# 4.0 无法打开word文档并在未锁定的情况下引用它,c#-4.0,com,C# 4.0,Com,您好,我知道如何从word文件中打开并获取纯文本,只需一些代码。然而,我有一个坏的影响,从这发生。doc这个词被锁定了,我不知道如何解除锁定它。我最终想要的是打开一个位于UNC路径中的文件并读取其中的一部分,不管其他人是否打开了它,解析其中的行,关闭它,不保存任何内容或锁定文件。我能得到的最接近的结果是我可以打开一个文件,解析它,它会锁定,但当我打开并关闭它(运行代码的同一台机器)时,它会神奇地解锁它 我对COM几乎一无所知,所以我找了一段时间,找到了一些关于Marshall对象的信息,并补充说

您好,我知道如何从word文件中打开并获取纯文本,只需一些代码。然而,我有一个坏的影响,从这发生。doc这个词被锁定了,我不知道如何解除锁定它。我最终想要的是打开一个位于UNC路径中的文件并读取其中的一部分,不管其他人是否打开了它,解析其中的行,关闭它,不保存任何内容或锁定文件。我能得到的最接近的结果是我可以打开一个文件,解析它,它会锁定,但当我打开并关闭它(运行代码的同一台机器)时,它会神奇地解锁它

我对COM几乎一无所知,所以我找了一段时间,找到了一些关于Marshall对象的信息,并补充说。我已尝试打开和关闭引用“ReadOnly:True”、“ReadOnly:False”。我觉得我缺少了一些简单的东西,所以我想在这里问一下。任何建议都可以,我在.NET4.0中编写代码,这样你就不必为打开文档而传入那些烦人的obj=null,obj=null

 public static string ReadWordDoc(string loc)
{
Word.Application wordApp = new Word.Application();

Word.Document Doc = wordApp.Documents.Open(loc, ReadOnly: true);

sb = "";

foreach (Word.Paragraph objParagraph in Doc.Paragraphs)
{
try 
{
    sb += objParagraph.Range.Text + "\n";
}
catch (Exception ex)
{
    throw ex;
}
}

return sb;

Doc.Close(SaveChanges: false);

Marshal.ReleaseComObject(Doc);

wordApp.Quit(SaveChanges: false);

}

我想是因为某种原因锁被锁上了。我用“不保存更改”退出Word应用程序,并运行垃圾收集器。这可能有点过分,但它基本上确保了我的目标文件上没有留下锁

Word._Application wordApp = new Word.Application();
    Word._Document Doc = wordApp.Documents.Open(loc, ReadOnly: true);
        try
        {
            sb = "";

            foreach (Word.Paragraph objParagraph in Doc.Paragraphs)
            {
                try
                {
                    sb += objParagraph.Range.Text + "\n";
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
        catch (COMException) { }
        finally
        {
            //FileInfo finfo = new FileInfo(loc);
            //finfo.IsReadOnly = false;

            if (Doc != null)
            {
                Doc.Close();
                Doc = null;
            }
            if (wordApp != null)
            {
                wordApp.Quit(Word.WdSaveOptions.wdDoNotSaveChanges);
                wordApp = null;
            }
        }

        GC.Collect();
        GC.WaitForPendingFinalizers();

        GC.Collect();
        GC.WaitForPendingFinalizers();

        return sb;