程序关闭时的文件操作问题

xiaochengyong 2002-02-13 09:12:14
程序关闭时的文件操作问题

一个程序Program1.exe,
1.运行时使用ADOTable->TableName="datafile.dbf";ADOTable->Active=true打开数据库文件datafile.dbf;
2.在退出程序前,执行ADOTable->Active=false(关闭datafile.dbf,用filemon可以看出,此时该文件是不会被关闭的,只有到Program1.exe结束时才会关闭);
3.在退出程序时,创建一个立即执行的进程Process1如下所示:
(Program1.exe的WinMain)
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
...
}
...
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi;
bool fSuccess=false;
AnsiString ProcessNameStr="Process1";
fSuccess=CreateProcess(NULL,
ProcessNameStr.c_str(),
NULL,NULL,
false,
0,
NULL,NULL,
&si,
&pi);
if(fSuccess)
{
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
return 0;
}

4.进程Process1执行时,先延时几秒Sleep(3000);在执行FileOpen("datafile.dbf",fmOpenRead)却会返回-1即不成功,这是为什么?盼望高手之点,谢谢!
...全文
68 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaochengyong 2002-02-14
  • 打赏
  • 举报
回复
STARTUPINFO si={sizeof(si)};
SECURITY_ATTRIBUTES saProcess,saThread;
PROCESS_INFORMATION pi;
saProcess.nLength=sizeof(saProcess);
saProcess.lpSecurityDescriptor=NULL;
saProcess.bInheritHandle=false;
saThread.nLength=sizeof(saThread);
saThread.lpSecurityDescriptor=NULL;
saThread.bInheritHandle=false;

bool fSuccess=false;
AnsiString ProcessNameStr=AnsiString ProcessNameStr="Process1";
fSuccess=CreateProcess(NULL,
ProcessNameStr.c_str(),
&saProcess,
&saThread,
false,
0,
NULL,NULL,
&si,
&pi);
if(fSuccess)
{
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
我也怀疑是文件内核对象的问题,但是我将代码改成如上所示,明确表示
子进程不继承父进程的内核对象,也不行.
另外,我还试了这样一种情况:
1.执行了Program1.exe
(ADOTable->TableName="datafile.dbf";ADOTable->Active=true,
不执行ADOTable->Active=false,不创建进程Process1)
2.这时,执行Process1。如果Process1中使用FileOpen("",fmOpenRead)
则打开文件不成功;如果Process1中使用FileOpen("",fmShareDenyNone)
则打开文件成功.
3.但是,如果执行Program1.exe(ADOTable->TableName="datafile.dbf";ADOTable->Active=true)
在Program1.exe退出时执行ADOTable->Active=false,创建进程Process1(使用的是FileOpen("",fmShareDenyNone) )却又是打开文件不成功???Why???
这和文件共享有没有关系.
我不懂电脑 2002-02-13
  • 打赏
  • 举报
回复
ADOTable->Active=false,只是关闭数据库,并不一定关闭文件。
创建一个立即执行的进程Process1他可能已经继承了已经打开的文件。

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧