2013-06-18 2 views
3

이 단어를 pdf 파일로 변환하려고합니다. 그러나 오류가 발생했습니다. "다른 프로세스에서이 프로세스를 사용하고 있기 때문에 프로세스가 파일에 액세스 할 수 없습니다."오류 다른 프로세스에서 사용 중이기 때문에 프로세스가 파일에 액세스 할 수 없습니다.

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; 
    } 

변환하는 동안 내 코드에 누락 된 부분이 있습니까? 누구든지 pdf로 낱말을 개조하는 방법 저에게 말할 수있다.

+0

'wordDocuments = apword.Documents.Open (Filename_path) .. wordDocuments.ExportAsFixedFormat (Filename_path, X)'- 동일한 파일명이 * 매우 * 의심 스럽습니다. – user2246674

+1

@ user2246674 Windows에서 동일한 코드가 작동했습니다. – pdp

+1

이 코드를 실행하면 실제 단어 문서가 바탕 화면에 열리지 않습니까? –

답변

-2

당신은 CS 페이지 .. 의 상단에

using System.Threading; 

를 추가하고 당신에게 오류를 보여주는 텍스트의 상단에

Thread.SpinWait(6000); 

을 추가해야합니다.

시도해보고 도움이 필요하면 알려주세요.

+2

나는 이것을 반대 할 것입니다 ... 그냥 문제를 지연시킬 것 같아요. – Sayse

+1

@mitesh 이것은 단순히 파일을 지연시킬 것입니다. pdf 나 단어의 파일이 매우 큰 경우. 어렵습니다. – pdp

+1

나는 @ sayse이 지연됩니다 – pdp

-1

변수에 파일 이름이 확장자가 있으므로 열려있는 문서에 문서를 저장하려고합니다. axtension 추가 : 그 라인 File.delete를 (targetPathip을) 생각

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

을;은 문제가 아닙니다. 응용 프로그램이 첫 번째 실행에서 파일을 열어두기 때문에 두 번째로 실행될 수 있습니다 (작업 관리자 참조).

+0

이것이 두 번째로 진행되었는지 궁금해했는데,이 경우에 올바르게 apword를 처리하면 해결할 수 있습니다. – Sayse

-1

이렇게 한 번 문제가 생겼습니다. 파일을 열기 전에 시도해보십시오 (바보 같지만 저를 위해 일했습니다 ...).

apword.Documents.Close(Filename_path); 
wordDocuments = apword.Documents.Open(Filename_path); 
+0

예외 : @ 3wic 문서 창이 활성 상태가 아니기 때문에이 방법이나 속성을 사용할 수 없습니다. – pdp

2

당신이해야 할 일은 파일을 열어 놓고있는 프로세스를 결정하는 것입니다.

SysInternals (현재는 Microsoft의 일부)에서 Process Explorer를 다운로드해야합니다.

이렇게하면 모든 프로세스를 검색하여 파일에 대해 열린 핸들이있는 프로세스를 찾을 수 있습니다.

물론 파일 충돌이 구성 파일이나 잠금 파일과 같이 덜 분명한 파일과 관련되어있을 수 있습니다. 이 경우 SysInternals의 Process Monitor (프로세스 모니터)에서 무엇이 실패했는지 확인할 수 있어야합니다.

두 가지 모두 훌륭한 도구이며 한번 사용하면 병기의 일부가됩니다.

0

코드를 처음 실행하면 문제가 없습니다. 그러나 파일이 제대로 처리되지 않았다는 것은 명백합니다. .net 개체에서 올바르게 작동하지 않습니다.. 그럼, 몇 가지 힌트 :
1) Interop.Word.Document 또는 Interop.Word.Application으로 공공 재산을 만들지 마십시오. 귀하의 방법에 사용하고 최대한 빨리 처분하십시오.
2) Application을 최대한 빨리 닫는 두 번째 이유는 RPC 서버가 시간 초과되었습니다. 잠시 동안 Application을 열어두면 RPC 서버에서 자동으로 연결이 끊어 지므로 사용할 수 없습니다.

이 점을 염두에두고 finally 문에 apword.Quit();을 호출해야하며 catch이 아니고 apword = null만으로는 충분하지 않습니다.
응용 프로그램이 오류로 종료 된 경우 - 워드 프로세스를 종료하십시오.
메소드를 종료하기 전에 wordDocuments.Close(ref SaveChanges)에 전화하는 것을 잊지 마십시오.

관련 문제