如何解锁或删除正在使用的文件,以便删除它?有问题的文件由我自己的应用程序使用。
更具体地说,我的应用程序使用的是免费软件 Zeos Lib。打开和保存我的数据库时,sqlite3.dll 文件必须与我的应用程序位于同一目录中才能正常工作。
我希望我的应用程序是 100% 独立的,所以我将 sqlite3.dll 作为 RC_DATA 添加到我的项目中,并且每当我需要使用它(即打开或保存数据库)时,我将它提取到与我的应用程序相同的文件夹中. 一旦打开或保存操作完成,我想删除 sqlite3.dll 文件,甚至没有人知道它在那里或者不必担心缺少库等。(虽然我可以理解你们中的一些人可能不喜欢将库存储在应用程序中的想法,我有这样做的理由:我不希望我的最终用户知道我的应用程序 (SQL) 的功能背后是什么,他们也不需要担心缺少动态链接库。)
问题是,我可以成功提取 sqlite3.dll 并将其用于我的操作,但该文件被我的应用程序锁定(直到我关闭我的应用程序),这让我:
强制解锁 sqlite3.dll 文件,而不关闭我的应用程序
强制删除 sqlite3.dll 文件
除非当然有其他建议?
这是提取和使用它的示例。我不需要直接调用诸如 LoadLibrary 等;Zeos Lib 单元必须注意这一点,只要 sqlite3.dll 与应用程序位于同一目录中。
procedure ExtractResource(ResName: String; Filename: String);
var
ResStream: TResourceStream;
begin
ResStream:= TResourceStream.Create(HInstance, ResName, RT_RCDATA);
try
ResStream.Position:= 0;
ResStream.SaveToFile(Filename);
finally
ResStream.Free;
end;
end;
//Open procedure
var
sFileName: String = ExtractFilePath(ParamStr(0)) + 'Sqlite3.dll';
if OpenDialog1.Execute then
begin
ExtractResource('RES_SQLITE3', sFileName);
... //process my database
...
... // finished opening database
if FileExists(sFileName) then
DeleteFile(sFileName);
end;
编辑
我认为我试图做的不是很实用,这不是一个好主意,正如 STATUS_ACCESS_DENIED 之前评论的那样。我已经决定最好不要继续我打算做的事情。