을 사용하여 파일을 잠 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;
}
스트림을 사용하여 한 줄씩 읽는 것이 더 쉽기 때문에 이렇게합니다.
해결책이 있습니까?
LockFileEx에 대한 문서에서 :
잠금 프로세스가 파일을 두 번 열면 영역을 잠금 해제 할 때까지이 두 번째 핸들을 통해 지정된 영역에 액세스 할 수 없습니다.
따라서 새 핸들을 만드는 대신 이미 가지고있는 핸들을 사용해야합니다.
_open_osfhandle 기능을 사용하면 기존의 핸들에서 파일 기술자를 만들 수 있습니다, 당신은 다음이 파일 기술자 통과 할 수 ofstream 생성자 대신에 파일 이름을.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다