今天到朋友的项目帮忙,他们的程序需要打开一个表格文件,我老是打开失败,后来他们告诉我,我的表格打开着的,所以open file就失败了,我x,难道就不能做成共享打开么?
fopen_s函数不能共享打开文件的,要使用_fsopen。。。
自己写了个测试例子测试了下:
FILE* pf = NULL;errno_t eRet = fopen_s(&pf, "c:/test.dat", "r+");if (eRet){ printf("fail to open file: test.dat\n");}else{ printf("open file success: test.dat\n");}
在开着测试程序的情况下,再次打开第二个测试程序时,就报fail了。
然后我又写了段测试代码:
FILE* pf = NULL;pf = _fsopen("c:/test.dat", "r+", _SH_DENYNO);if (!pf){ printf("fail to open file: test.dat\n");}else{ printf("open file success: test.dat\n");}
这次没问题了,每个进程都能打开那个文件。
简单说下_fsopen的第三个参数吧:
_SH_DENYRW 拒绝读写
_SH_DENYWR 拒写
_SH_DENYRD 拒读
_SH_DENYNO 可读写
_SH_SECURE 安全保护模式