急求 VC如何判断一个EXCEL表文件是否被打开 在线急等

ziyebuboka 2009-03-17 09:27:59
急求 VC如何判断一个EXCEL表文件是否被打开 在线急等

我有一个EXCEL文件 我想判断这个文件是否被我自己打开了 怎么办?

我是否什么FIREOPEN之类的什么的了 好像都不行

fstream pSrcFile;
pSrcFile.open(lpszSrcFileName,ios::in);
if (!pSrcFile)
{
cerr<<"File Not Found!";
return;
}

这个都不行

/* Open for write */
if( (stream2 = fopen( "data2", "w+" )) == NULL )
printf( "The file 'data2' was not opened\n" );
else
printf( "The file 'data2' was opened\n" );


这个是MSDN上的 也不行

好像这类函数在打开EXCEL上就有问题 也就是说他返回的就不是NULL 不管打开与否
...全文
716 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuhw0902 2011-05-04
  • 打赏
  • 举报
回复
sys0008正解!
MSDN8341 2009-12-01
  • 打赏
  • 举报
回复
有没有具体的代码啊
ziyebuboka 2009-03-17
  • 打赏
  • 举报
回复
3Q
sys0008 2009-03-17
  • 打赏
  • 举报
回复
友情提示
------------
请及时结贴
sys0008 2009-03-17
  • 打赏
  • 举报
回复
HANDLE hFile = CreateFile(_T("c:\\test.xls"), FILE_ALL_ACCESS, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
HRESULT hr = GetLastError();
if ( ERROR_ACCESS_DENIED == hr || ERROR_SHARING_VIOLATION == hr)
{
// 文件被占用
}
}
else
{
// 文件未被打开
CloseHandle(hFile);
}
ziyebuboka 2009-03-17
  • 打赏
  • 举报
回复
好了 我把这段代码放到程序初始化启动的最后面了 可以了

不过我觉得这样应该还是有影响啊 怎么清掉CreateFile造成的影响?
ziyebuboka 2009-03-17
  • 打赏
  • 举报
回复
VS调试 编译这个程序 如果文件是关闭的 自己结束了。。。
ziyebuboka 2009-03-17
  • 打赏
  • 举报
回复
可以了 不过还需要 怎么把CreateFile这个函数的东西给清掉?

现在是我这个程序 用了CreateFile之后 如果是文件没打开的状态下 启动的我这个程序 程序启动不了。。。。。。。。。。。。。。。。。。。

这玩意不是我写的 一时半会也搞不清楚。。。。。。

如果是EXCEL文件是打开的 反倒是程序可以启动。。。。。。。
sys0008 2009-03-17
  • 打赏
  • 举报
回复
HANDLE hFile = CreateFile(_T("c:\\test.xls"), FILE_ALL_ACCESS, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
HRESULT hr = GetLastError();
if ( ERROR_ACCESS_DENIED == hr || ERROR_SHARING_VIOLATION == hr)
{
// 文件被占用
}
}
sys0008 2009-03-17
  • 打赏
  • 举报
回复
ERROR_SHARING_VIOLATION 32 The process cannot access the file because it is being used by another process.
ziyebuboka 2009-03-17
  • 打赏
  • 举报
回复
没错误 就是返回的不是ERROR_ACCESS_DENIED 进不到里面
sys0008 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ziyebuboka 的回复:]
HANDLE hFile = CreateFile(_T("c:\\test.xls"), FILE_ALL_ACCESS, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
if ( ERROR_ACCESS_DENIED == GetLastError())
{
// 文件被占用
}
}

好像不行啊 我打开了那个EXCEL文件  然后测试 返回的不是ERROR_ACCESS_DENIED
[/Quote]

啥错误?
ziyebuboka 2009-03-17
  • 打赏
  • 举报
回复
HANDLE hFile = CreateFile(_T("c:\\test.xls"), FILE_ALL_ACCESS, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
if ( ERROR_ACCESS_DENIED == GetLastError())
{
// 文件被占用
}
}

好像不行啊 我打开了那个EXCEL文件 然后测试 返回的不是ERROR_ACCESS_DENIED
ziyebuboka 2009-03-17
  • 打赏
  • 举报
回复
ifstream f;
f.open(m_strFileIni);
if (!f.is_open())
{
cout << "load ini file not find " << m_strFileIni << " . \n";
return false;
}

这个也不行
sys0008 2009-03-17
  • 打赏
  • 举报
回复
HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);



HANDLE hFile = CreateFile(_T("c:\\test.xls"), FILE_ALL_ACCESS, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
if ( ERROR_ACCESS_DENIED == GetLastError())
{
// 文件被占用
}
}

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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