DeleteFile()在Embarcadero C++ Builder中不起作用

dphi5xsq  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(191)

我将几个PDF文件加载到Embarcadero C++中,并使用Gnostice pdfToolkit Vcl对它们进行数字签名。问题是在已签名的PDF文件中删除未签名的PDF文件。代码如下:

gtPDFDocumento->LoadFromFile("no_firmado.pdf");
gtPDFDocumento->AddSignature(firma_digital.pfx);
gtPDFDocumento->SaveToFile("firmado.pdf");

//You have to reload the pdf because if it does not give an error
gtPDFDocumento->LoadFromFile("firmado.pdf");
//
if(!DeleteFile("no_firmado.pdf"){
    int e = GetLastError();
    AnsiString error = SysErrorMessage(e);
    ShowMessage(error);
    return;
}

这是GetLastError()错误的结果:
进程没有访问该文件的权限,因为另一个进程正在使用该文件。
我想知道我如何才能解锁未签名的PDF文件,以删除它。

aelbi1ox

aelbi1ox1#

您仍然可以从最初加载no_firmado.pdf文件的行打开该文件。

gtPDFDocumento->LoadFromFile("no_firmado.pdf");

这就是您收到此错误的原因。
显式关闭文件,然后可以将其删除。

// Free Resources
 gtPDFDocumento->Reset();

 // Destroy PDF document object
 FreeAndNil(gtPDFDocumento);
 // After this point gtPDFDocumento can not be used unless reinitialized.

现在您可以调用DeleteFile(...)

0md85ypi

0md85ypi2#

我已经尝试过该代码,它给出了相同的错误:

gtPDFDocument->LoadFromFile("not_signed.pdf");
gtPDFDocument->AddSignature(digital_signature.pfx);
gtPDFDocument->SaveToFile("signed.pdf");

//You have to reload the pdf because if it does not give an error
gtPDFDocument->LoadFromFile("signed.pdf");
//
// Free Resources
gtPDFDocument->Reset();
// Destroy PDF document object
FreeAndNil(gtPDFDocument);
// After this point gtPDFDocument can not be used unless reinitialized.
if(!DeleteFile("not_signed.pdf"){
inte = GetLastError();
AnsiString error = SysErrorMessage(e);
ShowMessage(error);
return;
}

谢谢你!

相关问题