CopyFile Docx делает скрытое преобразование в документ - PullRequest
1 голос
/ 07 марта 2011

Я получил программу 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;

1 Ответ

5 голосов
/ 07 марта 2011

Попробуйте изменить код следующим образом:

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

Я думаю, что ваша GetTempFullFileName функция усекает .docx до .doc.Хотя это все догадки!

Функция CopyFile не изменяет содержимое файла.

...