如何可靠地确定文件是否已在Microsoft Excel中打开?

我正在实现一个接口到Excel。 我正在使用COM来直接从C ++自动化Excel。 我的大部分应用程序工作可靠。

但是,我不能检测文件是否已经在Excel中打开。 如果它是开放的,那么我想通知用户在运行模拟之前closures它。

我不使用MFC,VB或.NET。 我的解决scheme必须为Excel版本97至2010年工作。如果我可以以编程方式知道Excel的版本,可以使用不同的技术为不同的Excel版本。

我在同一个文件夹中查找名称为“〜$ xxx”(其中“xxx”是原始文件名)的文件,以确定Excel是否创build了会话锁。 但是这种技术并不总是有效。

一个类似的问题是一旦模拟开始在我的程序中,我想阻止用户在写入模式下打开文件(只读模式是OK)。

我不使用C ++,但使用VB.net中的相同的逻辑,这C + +代码可能应该做你想要的? 我还没有testing它,这也不需要你检查任何特定的Excel版本。 对于.xlsx或任何其他扩展名,只需replace下面的扩展名即可。

 std::ofstream ofs("MyFile.xls"); if(ofs.is_open()) { //~~> File is ready for output } Else { //~~> File is NOT ready for output } 

编辑

你也可能想看到这个?

主题 :FileInfo :: IsReadOnly属性

链接 : http : //msdn.microsoft.com/en-us/library/system.io.fileinfo.isreadonly.aspx#Y0

从上面的链接引用

获取或设置一个值,该值确定当前文件是否只读。

命名空间:System.IO

程序集:mscorlib(在mscorlib.dll中)