none
C++ 文件读取 _read 函数问题 RRS feed

  • 问题

  • 在读取office outlook的pst文件时(outlook开启),read函数读取的字节数返回为-1。但是如果关闭outlook后,读取没有任何问题,不知道有人碰到过这种情况没?代码如下

     int fd=0;
     errno_t openerr=_wsopen_s(&fd,path,_O_BINARY|_O_RDONLY,_SH_DENYNO,_S_IREAD );

     if (openerr == 0) //open
     {
      unsigned char *pFileDataBuf = new unsigned char [1024];
      __int64 seek = 0;
      _lseeki64(fd,seek,SEEK_SET);
       size_t byteRead =_read(fd,pFileDataBuf,1024);  //byteRead = -1 返回的

    }

    _close( fd );
       delete pFileDataBuf; 

    2011年9月14日 7:45

答案

  • 你能不能以共享方式只读打开要看当前文件拥有者打开文件时有没有设置相应权限

    如果outlook不是共享使用文件那其他应用程序就没有办法访问

    而且不同软件和软件不同版本之间处理同类问题时可能会采用完全不同的方式

    你这么比较没有意义

    • 已标记为答案 liuxubin 2011年9月15日 7:40
    2011年9月15日 0:57
  • 你能不能以共享方式只读打开要看当前文件拥有者打开文件时有没有设置相应权限

    如果outlook不是共享使用文件那其他应用程序就没有办法访问

    而且不同软件和软件不同版本之间处理同类问题时可能会采用完全不同的方式

    你这么比较没有意义


    同意,打开文件时,可以设置一个ShareMode,如果outlook没有设置FILE_SHARE_READ,那你即使是只读打开也不行
    • 已标记为答案 liuxubin 2011年9月15日 7:40
    2011年9月15日 2:58

全部回复

  • 应该是outlook也一直在占用这个文件
    2011年9月14日 7:58
  • outlook是在占用,但我是以共享方式只读打开的啊,并且其他的软件的文件就不会有这个问题,比如word excel 记事本什么的 都不曾有这个问题。outlook express也不会有,唯独outlook会有.....

    2011年9月14日 8:20
  • 你能不能以共享方式只读打开要看当前文件拥有者打开文件时有没有设置相应权限

    如果outlook不是共享使用文件那其他应用程序就没有办法访问

    而且不同软件和软件不同版本之间处理同类问题时可能会采用完全不同的方式

    你这么比较没有意义

    • 已标记为答案 liuxubin 2011年9月15日 7:40
    2011年9月15日 0:57
  • 你能不能以共享方式只读打开要看当前文件拥有者打开文件时有没有设置相应权限

    如果outlook不是共享使用文件那其他应用程序就没有办法访问

    而且不同软件和软件不同版本之间处理同类问题时可能会采用完全不同的方式

    你这么比较没有意义


    同意,打开文件时,可以设置一个ShareMode,如果outlook没有设置FILE_SHARE_READ,那你即使是只读打开也不行
    • 已标记为答案 liuxubin 2011年9月15日 7:40
    2011年9月15日 2:58
  • 可以先把这个文件copy一份,然后read这份
    麻烦把正确答案设为解答。
    2011年9月15日 6:39
    版主
  • 呵呵,我需要打开outlook运行时的那个文件,不能拷贝,不过多谢回答哈
    2011年9月15日 7:42
  • 呵呵,我需要打开outlook运行时的那个文件,不能拷贝,不过多谢回答哈
    2011年9月15日 7:42