我已经使用LockFileEx锁定了一个文件,但是我无法从它打开一个流。
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;
}
}在获得锁之后,我想这样做:
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;
}我这么做是因为我发现逐行阅读更容易.
有解决办法吗?
发布于 2014-07-10 01:26:34
来自LockFileEx文档
如果锁定过程第二次打开文件,则在解锁该区域之前,它无法通过第二个句柄访问指定的区域。
因此,您需要使用您已经拥有的句柄,而不是创建一个新的句柄。
手柄函数允许您从现有句柄创建文件描述符,然后可以将该文件描述符传递给流构造函数而不是文件名。
发布于 2014-07-09 22:11:04
用FILE_SHARE_READ打开文件。这意味着您允许进一步打开仅用于读取的文件。然后你试着打开它写,这将失败。
使用FILE_SHARE_READ | FILE_SHARE_WRITE代替。
https://stackoverflow.com/questions/24664046
复制相似问题