Firebird バックアップ ツール gbak で、その出力を Delphi ストリームに(中間ファイルなしで)書き込むようにしたいと考えています。ファイルではなく stdout に書き込むコマンド ライン パラメータがあります。次にExecute
、JEDI のメソッドを使用してJclSysUtils
gbak を起動し、その出力を処理します。
次のようになります。
procedure DoBackup;
var
LBackupAbortFlag: Boolean;
LBackupStream: TStringStream;
begin
LBackupAbortFlag := False;
LBackupStream := TStringStream.Create;
try
Execute('"C:\path to\gbak.exe" -b -t -v -user SYSDBA -pas "pw" <db> stdout',
LBackupStream.WriteString, // Should process stdout (backup)
SomeMemo.Lines.Append, // Should process stderr (log)
True, // Backup is "raw"
False, // Log is not
@LBackupAbortFlag);
LBackupStream.SaveToFile('C:\path to\output.fbk');
finally
LBackupStream.Free;
end;
end;
問題は、出力ファイルが小さすぎて実際のバックアップを含めることができないことです。それでも、ファイルのコンテンツの要素が表示されます。さまざまなストリーム タイプを試しましたが、違いはないようです。ここで何がうまくいかないのでしょうか?
アップデート
明確にするために、他のソリューションも歓迎します。何よりも、信頼できるものが必要です。そういうことを再発明するためではなく、そもそも JEDI を採用したのはそのためです。それなら、あまり複雑でなければいいですね。