delphi - CopyFile docx 对 doc 进行隐藏转换

标签 delphi winapi docx

我有一个 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;

最佳答案

尝试按如下方式更改代码:

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

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

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

关于delphi - CopyFile docx 对 doc 进行隐藏转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5217693/

相关文章:

java - 如何在 docx4j 中的 addParagraphOfText 上设置空格?

xml - 默认 WordML 单位度量?像素或点或英寸

delphi - 从资源(.res)文件加载文本

Delphi VirtualTreeView - 节点悬停时自动聚焦节点

c++ - C 或 C++ 或 WinApi 中是否有任何函数可以创建目录,包括指定路径中所有不存在的目录?

Perl - Win32 - 如何从另一个进程进行文件句柄的非阻塞读取?

java - 从 Tika 获取 Word 和 PDF 的段落计数

delphi - 在 Delphi IDE 中排除 EStackoverflow 异常的提示

delphi MS Office Outlook 错误

windows - Psexec 和 UAC 问题