如何判断文件是否被打开?

2shcm 2005-10-07 08:42:26
请问如何判断文件是否被打开?
例如:我的程序关联了一个.txt文件,双击打开文件时如何判断该文件是否被其它程序打开了呢?
我用过下面代码:
---------
判断文件是否在使用:

bool IsFileInUse(String FileName)
{
bool Result;
HANDLE Handle = CreateFile(FileName.c_str(), GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
Result = INVALID_HANDLE_VALUE == Handle;
if (!Result)
CloseHandle(Handle);
return Result;
}
-----------
它能单独判断该文件是否被其它程序打开,但用鼠标双击打开文件时似乎不能判断该文件是否被其它程序打开。以上我是在CMyApp::InitInstance()里判断的。
...全文
674 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
2shcm 2005-10-08
  • 打赏
  • 举报
回复
To Mackz(在相互)
请问如何设置共享权限呢?文件我是双击打开的,应该在那添加代码呢?
菜牛 2005-10-07
  • 打赏
  • 举报
回复
打开文件的时候都可以设置共享权限的,如果不能打开出错,你要检查错误,不能直接执行下去的。
2shcm 2005-10-07
  • 打赏
  • 举报
回复
To oasis2city(准备着!)
还有 提示“在存取F:\website\test.mdb 时发生共享违例。”后,程序就非法终止了!
2shcm 2005-10-07
  • 打赏
  • 举报
回复
To oasis2city(准备着!)
在CMyApp::InitInstance()里面,执行下面这行语句时出错!
if (!ProcessShellCommand(cmdInfo)) //←如果m_lpCmdLine 里面的文件已经被打开,则出错!
return FALSE; //例如:m_lpCmdLine == F:\website\test.mdb,如果
//test.mdb已经被其它程序打开,则提示“在存取F:\website\test.mdb 时发生共享违例。”

To laiyiling(Opportunity)
LockFile(Ex)这个我看了半天,也没想出解决方法来。.........还能提示提示吗?
golden201309 2005-10-07
  • 打赏
  • 举报
回复
怎么个出错法呢?
Kudeet 2005-10-07
  • 打赏
  • 举报
回复
LockFile(Ex)具体的看MSDN
2shcm 2005-10-07
  • 打赏
  • 举报
回复
先谢谢楼上的兄弟,但我还是不明白。
CString str = ::GetCommandLine();
执行后 str = ""F:\vc\myapp\小型数据库管理\Debug\小型数据库管理.exe" F:\website\test.mdb"
我还是无法判断“F:\website\test.mdb” 这个文件是否被其它程序打开!
如果我要打开的文件已经被其它程序打开,程序将会出错!


帮顶有分,谢谢!
golden201309 2005-10-07
  • 打赏
  • 举报
回复
双击打开时可以通过在CMyApp::InitInstance()中使用::GetCommandLine()函数获取打开路径。
如CString str = ::GetCommandLine();
你调试时看看这个str的值,一切就明白了。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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