Excel操作Bug引出的问题:如何判断文件是否被占用、打开
2016-08-03 20:10
971 查看
方法一:_sopen()
:具体函数描述sopen()int _sopen(const char *filename, int oflag, int shflag [, int pmode ]);
参数:filename 文件名 oflag 允许的操作类型 shflag 允许的共享类型 pmode 权限设置。
返回值 : 其中每个函数都将为打开的文件返回文件描述符。
如果 filename 或 oflag 是 NULL 指针,或者如果 oflag 或 shflag 不在有效值范围内,则调用的参数处理程序无效,如参数验证中所述。 如果允许执行继续,则这些函数将返回 -1 并将 errno 设置为以下值之一。
EACCES 给定路径是目录,或者文件是只读的,但是已尝试打开以供写入操作。
EEXIST 已指定 _O_CREAT 和 _O_EXCL 标志,但 filename 已经存在。
EINVAL 无效的 oflag 或 shflag 参数。
EMFILE 没有更多可用的文件描述符。
ENOENT 未找到文件或路径。
备注: 宽字符版 int _wsopen( const wchar_t *filename, int oflag, int shflag [, int pmode ] );
代码
#include <sstream> #include <fstream> #include <fcntl.h> #include <share.h> string strPath = AnsiString(strResaveName.c_str()).c_str(); while(1) { //BCB XE2 不识别_SH_DENYNO只能用0x40表示 fd = _sopen( strPath.c_str(), _O_RDWR/*打开文件以供读取和写入*/, 0x40/*允许读取和写入访问*/, _S_IREAD | _S_IWRITE/*允许读取和写入*/ ); if(-1 == fd) { if(IDOK == MessageBox(NULL,"测试结果.xls已被打开,请先关闭文件","提示", MB_OKCANCEL)) { continue; } else { return; } } else { _close(fd); //需要关闭,否则文件被打开产生临时文件 break; } }
如果Excel文件被打开,fd的值为-1;否则则返回3(测试实际运行结果);
方法二:文件流读写
代码:
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;
#include <iostream> #include <fstream> using namespace std; #define F_PATH "d:\\example.xlsx" int main(void) { ofstream iofile(F_PATH,ios::in|ios::out|ios::binary);//打开文件, 默认调用了open()函数 if(!iofile)//如果打开失败 { cerr<<"open error!"<<endl;//显示出错信息 abort();//程序退出 } return 0; }
如果Excel文件被打开,提示“open error”(测试实际运行结果);
相关文章推荐
- 如何判断Excel文件是否打开
- C#判断文件是否被打开占用
- 【java常见问题】——如何判断文件是否为空?
- 用Excel打开csv文件时,如何处理数字内容展现会自动转换格式的问题
- 用Excel打开csv文件时,如何处理数字内容展现会自动转换格式的问题
- C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
- form下载文件,指向iframe ,如何判断iframe加载完成 form.submit之后的事件问题 监听form表单下载文件是否完成
- C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
- C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
- C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
- 在以二进制文件打开方式打开文件的时候,fread返回值判断文件是否结束的问题
- C#判断文件是否被打开占用
- C#判断文件是否被打开占用
- 如何解决.csv格式文件用excel打开是乱码的问题?
- 如何解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题
- C#判断文件是否被打开占用
- C#判断文件是否被打开占用
- C#判断文件是否被打开占用
- 关于Excel操作编写的一个软件设计构思案例[连载] --如何打开Excel文件,获取需要列的数据显示到表格内做修改
- Unix C中的一些文件操作(判断是否存在,文件打开,删除等)