【问题标题】:CopyFile docx makes hidden conversion to docCopyFile docx 对 doc 进行隐藏转换
【发布时间】:2011-03-07 09:01:35
【问题描述】:

我有一个 Delphi 7 程序,它必须复制一个 docx 文件。我正在使用 Windows API CopyFile 函数。问题是这个函数似乎对旧文档格式进行了隐藏转换。 第一件事:复制后文件大小增加。 第二:在 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;

【问题讨论】:

  • "第一件事:复制后文件大小增加。"你真的确定会发生这种情况吗?
  • Windows CopyFile 函数不会将 Microsoft Word DOCX 文件转换为 DOC。它与 Microsoft Word 无关。

标签: delphi winapi docx


【解决方案1】:

尝试如下更改您的代码:

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

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

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

【讨论】:

  • ChangeFileExt 没有更改我的文件扩展名,不知道为什么。但是当我手动将 .tmp 重命名为 .docx 时,它可以正常打开。所以我想我可以在这里接受,其余的我应该自己解决。谢谢。
  • 无论如何,我仍然想知道为什么在复制目标文件扩展名时很重要。奇怪...
  • @Robert 嗯,CopyFile 的 lpNewFileName 参数就是目标文件的全名。它可以有任何你喜欢的扩展名。文件内容不受影响。您的临时文件函数可能基于 Windows.GetTempFileName,它返回 8.3 文件名,因此将您的 .docx 截断为 .doc。
猜你喜欢
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 2011-06-16
  • 2012-05-17
  • 2020-05-22
  • 2023-04-06
相关资源
最近更新 更多