我有一个必须复制docx文件的Delphi 7程序。我正在使用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;

最佳答案

尝试如下更改代码:

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


我认为您的GetTempFullFileName函数正在将.docx截断为.doc。不过这都是猜测!

CopyFile函数不会修改文件的内容。

10-07 19:20