CopyFile docx隐藏转换为doc

Rob*_*roj 1 delphi winapi docx

我有一个Delphi 7程序,它必须复制docx文件.我正在使用Windows API CopyFile函数.问题是这个函数似乎隐藏了转换为旧的doc格式.第一件事:复制后文件大小增加.第二:在Office 2007中打开文件时,我收到一条错误消息,指出:检查您对文档或磁盘的权限,检查可用磁盘空间.

而且奇怪的是:如果我在TotalCommander中更改了从docx到doc的复制文件的扩展名,它会正常打开.所以它似乎使隐藏的转换不知道为什么.

在两台不同的计算机上测试过.Win XP Prof SP3,Office 2007 Prof Plus SP2

有任何想法吗?

功能体如下:

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;
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 5

尝试更改代码,如下所示:

Result := IObsSzab.GetTempFullFileName('.tmp');
Result := ChangeFileExt(Result, ExtractFileExt(openDlg.FileName));
Run Code Online (Sandbox Code Playgroud)

我认为你的GetTempFullFileName函数是将.docx截断为.doc.尽管如此,这都是猜测!

CopyFile功能不会修改文件的内容.

  • @Robert嗯,CopyFile的lpNewFileName参数只是目标文件的全名.它可以有你喜欢的任何扩展名.文件内容不受影响.您的临时文件函数可能基于Windows.GetTempFileName,它返回8.3文件名,因此将.docx截断为.doc. (3认同)