首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用windows c++ LockFIle()锁定文件,然后从其中获取流?

使用windows c++ LockFIle()锁定文件,然后从其中获取流?
EN

Stack Overflow用户
提问于 2014-07-09 21:24:38
回答 2查看 1.3K关注 0票数 2

我已经使用LockFileEx锁定了一个文件,但是我无法从它打开一个流。

代码语言:javascript
复制
HANDLE indexHandle = CreateFile (indexFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, 0, 
        OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

bool indexLock = false;
OVERLAPPED overlapped;
memset (&overlapped, 0, sizeof (overlapped));
while (noOfTries >0 && !indexLock)
{
   if (!LockFileEx (indexHandle, LOCKFILE_EXCLUSIVE_LOCK, 0, 0, UINT_MAX, &overlapped))
   {
      InfoLog << "Failed to get lock on index file  -- Error code is ["
            << GetLastError () <<"]"<<std::endl;
      Sleep(sleepTime);
      noOfTries--;

   }
   else
   {
      indexLock=true;    
   }
}

在获得锁之后,我想这样做:

代码语言:javascript
复制
string indexFile = mPath + Util::PATH_SEPARATOR + mIndexFileName;
os.open( indexFile.c_str(), ios_base::app);
if (!os)
{
  InfoLog << "BinaryFileSystemObjectStore:: ofstream: Failed to open index for write: " << indexFile.c_str() << endl;
}

我这么做是因为我发现逐行阅读更容易.

有解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-10 01:26:34

来自LockFileEx文档

如果锁定过程第二次打开文件,则在解锁该区域之前,它无法通过第二个句柄访问指定的区域。

因此,您需要使用您已经拥有的句柄,而不是创建一个新的句柄。

手柄函数允许您从现有句柄创建文件描述符,然后可以将该文件描述符传递给流构造函数而不是文件名。

票数 1
EN

Stack Overflow用户

发布于 2014-07-09 22:11:04

FILE_SHARE_READ打开文件。这意味着您允许进一步打开仅用于读取的文件。然后你试着打开它写,这将失败。

使用FILE_SHARE_READ | FILE_SHARE_WRITE代替。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24664046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档