2011-03-07 3 views
1

docx 파일을 복사해야하는 Delphi 7 프로그램이 있습니다. Windows API CopyFile 함수를 사용하고 있습니다. 문제는이 함수가 이전 doc 형식으로 숨겨진 변환을하는 것 같습니다. 첫 번째 문제 : 복사 후에 파일 크기가 증가합니다. 두 번째 : Office 2007에서 파일을 열 때 다음과 같은 오류 메시지가 나타납니다. 문서 또는 디스크에 대한 사용 권한을 확인하고 여유 디스크 공간을 확인하십시오.CopyFile docx는 문서로 숨겨진 변환을합니다

이상한 것보다 : 내가 TotalCommander에서 docx에서 doc로 복사 한 파일의 확장자를 변경하면 정상적으로 열립니다. 그래서 그것은 왜 숨겨진 변환을하지 않는 것 같습니다.

서로 다른 두 대의 컴퓨터에서 테스트되었습니다. 둘 다 Win XP Prof SP3, Office 2007 Prof Plus SP2

아이디어가 있으십니까?

함수 본문은 다음과 같습니다 :

Result := IObsSzab.GetTempFullFileName('.tmp'); 
Result := ChangeFileExt(Result, ExtractFileExt(openDlg.FileName)); 

나는 당신의 GetTempFullFileName 기능 덕에 .DOCX 절단 생각 다음과 같이

function TDlgNowySzablon.PobierzPlikNaDoc() : string; 
var 
    openDlg : TOpenDialog; 
begin 
    Result:=''; 
    openDlg:=TOpenDialog.Create(self); 
    openDlg.Filter:='Dokumenty Microsoft Word (*.doc;*docx)|*.doc;*.docx'; 

    if openDlg.Execute then begin 
    Result := IObsSzab.GetTempFullFileName(ExtractFileExt(openDlg.FileName)); 
    if not CopyFile(PChar(openDlg.FileName),PChar(Result),true) then begin 
     Result:=''; 
    end; 
    end; 

    openDlg.Free; 
end; 
+0

"첫 번째 : 복사 후 파일 크기가 커집니다." 그 일이 정말로 확실한가요? – CodesInChaos

+1

Windows'CopyFile' 함수는 Microsoft Word DOCX 파일을 DOC로 변환하지 않습니다. Microsoft Word와는 아무런 관련이 없습니다. –

답변

5

에 한번 당신의 코드를 변경. 그것은 모든 추측이다!

CopyFile 함수는 파일의 내용을 수정하지 않습니다.

+0

ChangeFileExt가 내 파일 확장명을 변경하지 못했습니다. 그 이유는 모르겠습니다. 하지만 수동으로 .tmp .docx로 이름을 바꾸면 괜찮습니다. 그래서 나는 여기에 수락을 줄 수 있고 나머지는 스스로 해결해야한다고 생각합니다. 고맙습니다. –

+0

어쨌든 나는 여전히 대상 파일 확장명을 복사 할 때 이유를 알고 싶습니다. 이상한 ... –

+3

@ 로버트 글쎄, CopyFile의 lpNewFileName 매개 변수는 대상 파일의 전체 이름입니다. 원하는 확장명을 가질 수 있습니다. 파일 내용은 영향을받지 않습니다. 임시 파일 기능은 아마도 8.3 파일 이름을 반환하는 Windows.GetTempFileName을 기반으로하므로 .docx를 .doc로 자릅니다. –